添加新的动态属性

Vik*_*ram 5 c#-4.0

我们在msdn中读到我们使用DynamicObject Class"添加新的动态属性"我编写了一个以下程序

public class DemoDynamicObject : DynamicObject
{

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

但是当我运行这个程序时,它会给出运行时错误:'DemoDynamicObject'不包含'FirstName'的定义,如果我们通过使用DynamicObject Class添加动态属性那么为什么它可以给出这个错误任何人都可以告诉我原因和解决方案?

Jer*_*ill 9

使用DynamicObject作为基类时,应该为TryGetMember和TrySetMember提供特定的覆盖,以跟踪您正在创建的动态属性(基于DynamicObject MSDN文档):

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您只想拥有一个可以添加属性的动态对象,则只需使用ExpandoObject实例,并跳过继承自DynamicObject的自定义类.