我们在msdn中读到了使用DynamicObject Class“添加新的动态属性” 我写了一个以下的程序
public class DemoDynamicObject : DynamicObject
{
}
class Program
{
public static void Main()
{
dynamic dd = new DemoDynamicObject();
dd.FirstName = "abc";
}
}
但是当我运行这个程序时,它会给出运行时错误:'DemoDynamicObject'不包含'FirstName'的定义 如果我们使用DynamicObject Class添加动态属性,那么它为什么会出现此错误 谁能告诉我理由和解决方案?
答案 0 :(得分: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的自定义类。