必须继承DynamicObject
例:
class ParamClass : DynamicObject
{
private Dictionary<string, object> values = new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = null;
if (!values.ContainsKey(binder.Name)) return false;
result = values[binder.Name];
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
values[binder.Name] = value;
return true;
}
public override IEnumerable<string> GetDynamicMemberNames()
{
return values.Select(m => m.Key);
}
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
if (binder.Name == "SetModel")
{
values = args[0] as Dictionary<string, object>;
result = true;
return true;
}
else
return base.TryInvokeMember(binder, args, out result);
}
}
class Program
{
static void Main(string[] args)
{
dynamic o = new ParamClass();
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("Name","纺三");
dic.Add("Age",15);
o.SetModel(dic);
var t=o.Name;
Console.WriteLine(t);
Console.ReadKey();
}
}
例:
class ParamClass : DynamicObject
{
private Dictionary<string, object> values = new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = null;
if (!values.ContainsKey(binder.Name)) return false;
result = values[binder.Name];
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
values[binder.Name] = value;
return true;
}
public override IEnumerable<string> GetDynamicMemberNames()
{
return values.Select(m => m.Key);
}
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
if (binder.Name == "SetModel")
{
values = args[0] as Dictionary<string, object>;
result = true;
return true;
}
else
return base.TryInvokeMember(binder, args, out result);
}
}
class Program
{
static void Main(string[] args)
{
dynamic o = new ParamClass();
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("Name","纺三");
dic.Add("Age",15);
o.SetModel(dic);
var t=o.Name;
Console.WriteLine(t);
Console.ReadKey();
}
}