我试图了解动态对象类型。发现这本MSDN文章非常合同且清晰,作为如何创建和使用DynamicObject:

http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx

该文章包含一个简单的动态数学类,该类从DynamicObject继承。

现在,我想迭代我动态创建的DynamicObject属性:

dynamic d = new DynamicDictionary();
d.Name = "Myname";
d.Number = 1080;

foreach (var prop in d.GetType().GetProperties())
{
  Console.Write prop.Key;
  Console.Write prop.Value;
}

显然,这行不通。我想学习如何在不改变我的动态模式类的情况下做到这一点,因为我真的在尝试学习如何将其用于从DynamicObject继承的各种现有对象。

需要反思吗?我肯定错过了什么...

有帮助吗?

解决方案

您是否尝试过DynamicDictionary.getDynamicMemberNames()方法? - http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.getdynamicmembnames.aspx

其他提示

我相信你会对 ExpandoObject 班级。这 DynamicObject 课堂只是您打算提供所有逻辑的基础。它明确实施了 IDictionary<string, object> 接口,因此您可以访问其属性或以这种方式添加新属性。

// declare the ExpandoObject
dynamic expObj = new ExpandoObject();
expObj.Name = "MyName";
expObj.Number = 1000;

// print the dynamically added properties
foreach (KeyValuePair<string, object> kvp in expObj) // enumerating over it exposes the Properties and Values as a KeyValuePair
    Console.WriteLine("{0} = {1}", kvp.Key, kvp.Value);

// cast to an IDictionary<string, object>
IDictionary<string, object> expDict = expObj;

// add a new property via the dictionary reference
expDict["Foo"] = "Bar";

// verify it's been added on the original dynamic reference
Console.WriteLine(expObj.Foo);

我刚刚意识到您正在实施 DynamicDictionary 上课并误解了您的问题。对不起。

当与动态参考一起使用时,您只能访问公开暴露的成员。从那以后 Count 被宣布为公开(另一个 DynamicObject 成员),您需要使用反射才能访问内部字典以轻松获取这些值(如果您不打算进一步更改)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top