2010-12-15 58 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