2016-02-19 84 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