Я делаю что-то неправильно, или следующий код действительно невозможен?
dynamic x = new ExpandoObject { Foo = 12, Bar = "twelve" };
Если это действительно невозможно, существует ли еще один однострочный способ создания объекта ExpandoObject с двумя свойствами?
Почему команда С# откажется от того же синтаксиса инициализации, что и для обычных объектов, анонимных объектов и перечислений/списков?
Обновление
Я задал этот вопрос, потому что я пытался показать энтузиасту Pearl классные новые динамические функции С#, но затем я был застопорен тем, что не мог делать то, что, как я думал, было логическим экземпляром ExpandoObject
. Благодаря ответу Ханса Пассана, я понимаю, что ExpandoObject
был неправильным инструментом для работы. Моя реальная цель состояла в том, чтобы использовать динамические функции С# для возврата двух именованных значений из метода. Как указывает Ханс, ключевое слово dynamic
идеально подходит для этого. Для этого мне не нужен ExpandoObject
со всеми его накладными расходами.
Итак, если вы хотите вернуть пару именованных значений из метода, и вас не интересует безопасность типа, Intellisense, рефакторинг или производительность, это работает довольно хорошо:
public dynamic CreateFooBar()
{
return new { Foo = 42, Bar = "Hello" };
}
Использование:
dynamic fooBar = CreateFooBar();
var foo = fooBar.Foo;
var bar = fooBar.Bar;