gpt4 book ai didi

c# - ExpandoObject 对象和 GetProperty()

转载 作者:行者123 更新时间:2023-12-03 21:58:12 25 4
gpt4 key购买 nike

我正在尝试编写一个通用实用程序,以便从 .NET 外部通过 COM 使用(/skip long story)。无论如何,我正在尝试向 ExpandoObject 添加属性,并且需要将 PropertyInfo 结构取回以传递给另一个例程。

using System.Collections.Generic;
using System.Diagnostics;
using System.Dynamic;
using System.Reflection;

public class ExpandoTest
{
public string testThis(string cVariable)
{
string cOut = "";

ExpandoObject oRec = new ExpandoObject { };
IDictionary<string, object> oDict = (IDictionary<string, object>)oRec;

oDict.Add(cVariable, "Test");

Trace.WriteLine(cVariable);
Trace.WriteLine(oDict[cVariable]);

PropertyInfo thisProp = oRec.GetType().GetProperty(cVariable);

if (thisProp != null)
{
cOut= "Got a property :)";
}

return cOut;
}
}

为什么我总是在 thisProp 中得到一个空值?我显然不明白,但我已经盯着它看了一天,但一无所获。谢天谢地,所有的帮助/批评都被接受了!

最佳答案

使用 ExpandoObject 时看起来您可以在运行时添加属性,但实际上不会在 CLR 级别执行此操作。这就是为什么使用反射来获取您在运行时添加的属性不起作用的原因。

想一想 ExpandoObject 会有所帮助作为将字符串映射到对象的字典。当您治疗 ExpandoObject作为 dynamic variable 任何对属性的调用都会被路由到该字典。

dynamic exp = new ExpandoObject();
exp.A = "123";

实际调用比较复杂,涉及到DLR,但是效果和写一样
((IDictionary<string, object>)exp)["A"] = "123";

这也仅适用于使用 dynamic .上面代码的强类型版本会导致编译时错误。
var exp = new ExpandoObject();
exp.A = "123"; // compile-time error
ExpandoObject的实际执行可以找到 here .

关于c# - ExpandoObject 对象和 GetProperty(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32312207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com