2017-06-06 89 views
0

比方說,我有下面的類:我可以將DynamicObject或ExpandoObject轉換爲特定類型嗎?

class Person 
{ 
    public String Name { get; set; } 
    public String Address { get; set; } 
} 

然後我創建了一個動態對象,就像這樣:

dynamic person = new ExpandoObject(); 
person.Name = "Henrik"; 
person.Address = "Home"; 
person.Age = 100; 

現在,是有可能在任何(最好是簡單)的方式來轉換創建對象到Person類(的子類)的對象中?這樣做不起作用:

var p = (Person)person; 

因爲以任何方式人物對象是沒有關係的類Person,它只是碰巧包含Person類的所有屬性。但是,是否可以通過簡單而通用的方式進行轉換?理想情況下,我希望能夠將我的person對象轉換爲Person的子類,除了(在本例中)新屬性「Age」之外,它還包含(顯然)Person的所有屬性。

+2

雖然這並不直接回答您的題目,但可以爲Person創建一個構造器,將一個動態對象作爲參數並讀取您想要的屬性。 'public Person(dynamic myDynamicObject){this.Name = myDynamicObject.Name; }' – Flater

+0

問題代碼與* inheritance *無關。您正試圖*顯式將一個動態對象轉換爲特定的類型。當存在繼承關係或存在明確的轉換運算符時,這可以被允許。 –

回答

0

不,你不能追溯應用繼承或類似的接口。這不僅僅是C#或大多數語言的工作原理。關於dynamic,ExpandoObjectDynamicObject之間的差異的討論見this answer

您可以實現IDynamicMetaObjectProvider接口,或者甚至從DynamicObject繼承,如所示。

這將允許您爲您的新類型添加動態性。

相關問題