Добавление методов в ExpandoObjects - PullRequest
5 голосов
/ 16 сентября 2010

UPDATE

Проблема не в коде, проблема в том, что вы, очевидно, не можете оценить динамические объекты из непосредственного окна.


Я пытаюсь привязать методы к 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 голосов
/ 16 сентября 2010

Вы уверены, что включили весь код?

Я только что проверил и запустил следующее, и все прошло успешно:

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());
0 голосов
/ 16 сентября 2010

Компилятор пожалуется на

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