向ExpandoObjects添加方法

6

更新

问题不在于代码,而在于显然你无法从即时窗口中评估动态对象。


我试图给ExpandoObject添加方法,但不确定如何使其工作。以下是我的代码:

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();

有人知道如何做到这一点吗?
2个回答

9

你确定已经包含了所有的代码吗?

我刚刚测试并运行了以下代码,并且成功了:

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());

奇怪。当你运行它时它可以工作,但是当你试图从即时窗口调用它时它就不起作用了。谢谢! - Micah

0

编译器会抱怨

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 = "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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接