2016-02-19 104 views
0

我有一个继承自IDynamicMetaObjectProvider的对象。当我在Visual Studio中进行调试时,Watch窗口显示需要扩展才能评估的“Dynamic View”。评估动态属性

我该如何在代码中做同样的事情 - 我如何获取动态myThing并从中获取包含myThing中所有动态属性/值的对象或字典?

回答

1

如果IDynamicMetaObjectProvider实现可以提供动态成员名称,可以获取它们。

它适用于ExpandoObjectsDynamicObjects以及任何其他IDynamicMetaObjectProvider谁提供的元对象的实现GetDynamicMemberNames()

试试这个:

var properties = new List<string>(); 
dynamic dynObject = new ExpandoObject(); 

dynObject.Prop1 = "property value 1"; 
dynObject.Prop2 = "property value 2"; 

var provider = dynObject as IDynamicMetaObjectProvider; 

if (provider != null) 
    properties.AddRange(provider.GetMetaObject(Expression.Constant(dynObject)).GetDynamicMemberNames()); 

foreach (var prop in properties) 
{ 
    //do something 
} 
+0

啊,所以我必须枚举通过'GetDynamicMemberNames'属性即可。嗯,我希望在.NET的某个地方有一些扩展方法,它只会给我整个对象作为匿名'对象'。 – core