题
我试图了解动态对象类型。发现这本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
成员),您需要使用反射才能访问内部字典以轻松获取这些值(如果您不打算进一步更改)。
不隶属于 StackOverflow