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

誰でもこれを行う方法を知っていますか?

4

2 に答える 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());
于 2010-09-16T14:25:50.983 に答える
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);
于 2010-09-16T14:27:30.627 に答える