C# 向ExpandoObjects添加方法 更新

C# 向ExpandoObjects添加方法 更新,c#,dynamic,.net-4.0,expandoobject,C#,Dynamic,.net 4.0,Expandoobject,问题不在于代码,问题在于显然无法从即时窗口计算动态对象 我试图将方法附加到ExpandooObject,但不确定如何使其工作。这是我的密码: dynamic myObj = new ExpandoObject(); myObj.First = "Micah"; myObj.Last = "Martin"; myObj.AsString = new Func<string>(() => myObj.First + " " + myObj.Last); //No matter

问题不在于代码,问题在于显然无法从即时窗口计算动态对象


我试图将方法附加到ExpandooObject,但不确定如何使其工作。这是我的密码:

dynamic myObj = new ExpandoObject();
myObj.First = "Micah";
myObj.Last = "Martin";
myObj.AsString = new Func<string>(() => myObj.First + " " + myObj.Last);

//No matter what I do I get 'object' does not contain a definition for 'AsString'
myObj.AsString;
myObj.AsString();
myObj.AsString.Invoke();
dynamic myObj=new ExpandoObject();
myObj.First=“Micah”;
myObj.Last=“马丁”;
myObj.AsString=新函数(()=>myObj.First+“”+myObj.Last);
//无论我做什么,我得到的“object”不包含“AsString”的定义
myObj.AsString;
myObj.AsString();
myObj.AsString.Invoke();

有人知道怎么做吗?

您确定包含了所有代码吗

我刚刚测试并运行了以下程序,结果成功:

dynamic obj = new ExpandoObject();

obj.First = "Hello";
obj.Last = "World!";

obj.AsString = new Func<string>(() => obj.First + " " + obj.Last);

// Displays "Hello World!"
Console.WriteLine(obj.AsString());
dynamic obj=new ExpandoObject();
obj.First=“你好”;
obj.Last=“世界!”;
obj.AsString=新函数(()=>obj.First+“”+obj.Last);
//显示“你好,世界!”
Console.WriteLine(obj.AsString());

编译器会抱怨

myObj.AsString; // only assignment, call, increment, decrement, and new object expressions can be used as a statement
所以,摆脱它。当然,要去掉你说的不可编译的代码行。但是,一旦这些位被修复,代码的其余部分应该可以工作。示例(加上添加另一个“方法”):

dynamic myObj=new ExpandoObject();
myObj.First=“Stack”;
myObj.Last=“溢出”;
Action PrintInt=input=>Console.WriteLine(input.ToString());
myObj.PrintInt=PrintInt;
myObj.PrintInt(1);
myObj.AsString=新函数(()=>myObj.First+“”+myObj.Last);
字符串s=myObj.AsString();
控制台。写入线(s);

奇怪。当您运行它时,它确实起作用,但当您尝试从即时窗口调用它时,它就不起作用。谢谢
dynamic myObj = new ExpandoObject();
myObj.First = "Stack";
myObj.Last = "Overflow";

Action<int> PrintInt = input => Console.WriteLine(input.ToString());
myObj.PrintInt = PrintInt;
myObj.PrintInt(1);

myObj.AsString = new Func<string>(() => myObj.First + " " + myObj.Last);
string s = myObj.AsString();
Console.WriteLine(s);