Я делаю что-то неправильно, или следующий код действительно невозможен?
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;