2010-12-15 61 views
5

我們在MSDN閱讀我們通過使用DynamicObject類 「添加新的動態屬性」我寫了下面的程序添加新的動態特性

public class DemoDynamicObject : DynamicObject 
{ 

} 
class Program 
{ 
    public static void Main() 
    { 
     dynamic dd = new DemoDynamicObject(); 
     dd.FirstName = "abc"; 
    } 
} 

但是,當我運行這個程序,它提供了運行時錯誤:「DemoDynamicObject」呢不包含「FirstName」的定義 如果我們通過使用DynamicObject類添加動態屬性,那麼爲什麼它可以給這個錯誤 任何人都可以告訴我理由和解決方案?

回答

9

當使用DynamicObject作爲你的基類,你應該提供特定的覆蓋到TryGetMember和TrySetMember,讓您創建的動態屬性的軌跡(基於DynamicObject MSDN documentation):

class DemoDynamicObject: DynamicObject 
{ 
    Dictionary<string, object> dictionary 
     = new Dictionary<string, object>(); 

    public override bool TryGetMember(
     GetMemberBinder binder, out object result) 
    { 
     string name = binder.Name; 
     return dictionary.TryGetValue(name, out result); 
    } 

    public override bool TrySetMember(
     SetMemberBinder binder, object value) 
    { 
     dictionary[binder.Name] = value; 
     return true; 
    } 
} 

如果你只是想有一個可以添加屬性的動態對象,您可以簡單地使用ExpandoObject實例,並跳過繼承自DynamicObject的自定義類。

+0

非常感謝你 – Vikram 2010-12-16 04:33:42

+0

不客氣。如果此答案解決了您的問題,則應考慮將其標記爲「已接受的答案」。謝謝。 – JeremyDWill 2010-12-16 13:46:48