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