dynamic a = new { A = 1, B = 2 };
Console.WriteLine("a.A=" + a.A);
dynamic b = new Dictionary<string,int>();
b["A"] = 6;
Console.WriteLine("b[\"A\"]=" + b["A"]);
//Following opration is not supported
//b.A=6;
//Console.WriteLine("b[\"A\"]=" + b.A);
var c = func();
Console.WriteLine("c[0].A=" + c[0].A);
//Access c[0].UnknowProperty will cause a RuntimeBinderException
dynamic test = new TestClass();
test.P1 = 34;
test.P2 = func();
Console.WriteLine("test.P1=" + test.P1);
Console.WriteLine("test.P2[1].B=" + test.P2[1].B);
static dynamic[] func()
{
return new dynamic[]{new
{
A = 124,
B = 345
},new
{
A = 2345,
B = 890
}};
}
public class TestClass
{
public int P1 { get; set; }
public dynamic P2 { get; set; }
}
[Serializable]
public class DynamicObject : IDynamicMetaObjectProvider
{
protected DynamicObject();
public virtual IEnumerable<string> GetDynamicMemberNames();
public virtual DynamicMetaObject GetMetaObject(Expression parameter);
public virtual bool TryBinaryOperation(BinaryOperationBinder binder, object arg, out object result);
public virtual bool TryConvert(ConvertBinder binder, out object result);
public virtual bool TryCreateInstance(CreateInstanceBinder binder, object[] args, out object result);
public virtual bool TryDeleteIndex(DeleteIndexBinder binder, object[] indexes);
public virtual bool TryDeleteMember(DeleteMemberBinder binder);
public virtual bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result);
public virtual bool TryGetMember(GetMemberBinder binder, out object result);
public virtual bool TryInvoke(InvokeBinder binder, object[] args, out object result);
public virtual bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result);
public virtual bool TrySetIndex(SetIndexBinder binder, object[] indexes, object value);
public virtual bool TrySetMember(SetMemberBinder binder, object value);
public virtual bool TryUnaryOperation(UnaryOperationBinder binder, out object result);
}