1,自定义动态对象需要继承DynamicObject类

2,可根据需要,重写不同的DynamicObject方法

-----------------------------------------------------DynamicClass.cs

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Dynamic;namespaceConsoleApplication3{publicclassDynamicClass:DynamicObject{Dictionary<string,object>_dynamicData=newDictionary<string,object>();///<summary>///为获取成员值的操作提供实现///</summary>///<paramname="binder"></param>///<paramname="result"></param>///<returns></returns>publicoverrideboolTryGetMember(GetMemberBinderbinder,outobjectresult){boolsuccess=false;result=null;if(_dynamicData.ContainsKey(binder.Name)){result=_dynamicData[binder.Name];success=true;}else{result="PropertyNotFound";success=false;}returnsuccess;}///<summary>///为设置成员值的操作提供实现///</summary>///<paramname="binder"></param>///<paramname="value"></param>///<returns></returns>publicoverrideboolTrySetMember(SetMemberBinderbinder,objectvalue){_dynamicData[binder.Name]=value;returntrue;}}}

-----------------------------------------------------主程序

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Dynamic;namespaceConsoleApplication3{classProgram{staticvoidMain(string[]args){dynamicdyn=newDynamicClass();dyn.name="a";dyn.aa=newFunc<string,string>(r=>r);dyn.name="b";Console.WriteLine(dyn.name+"|"+dyn.aa("b"));//输出:b|bConsole.ReadKey();}}}