最佳答案
是我做错了什么,还是下面的代码真的不可能?
dynamic x = new ExpandoObject { Foo = 12, Bar = "twelve" };
如果这真的是不可能的,是否有另一种一行的方法来实例化一个具有两个属性的 expdoObject?
为什么 C # 团队选择不允许使用与常规对象、匿名对象和可枚举数据/列表相同的初始化语法?
更新
我问这个问题是因为我想向一个 Pearl 爱好者展示 C # 很酷的新动态特性,但是后来我因为不能做我认为是 ExpandoObject
的逻辑实例化而停滞不前。多亏了汉斯 · 帕桑特的回答,我才意识到 ExpandoObject
并不适合这项工作。我真正的目标是使用 C # 的动态特性从一个方法返回两个命名值。正如汉斯所指出的,dynamic
关键字非常适合这种情况。我不需要 ExpandoObject
和它的所有开销来做这个。
因此,如果您想从一个方法返回一对命名值,并且您不关心类型安全、智能感知、重构或性能,那么这种方法工作得很好:
public dynamic CreateFooBar()
{
return new { Foo = 42, Bar = "Hello" };
}
用法:
dynamic fooBar = CreateFooBar();
var foo = fooBar.Foo;
var bar = fooBar.Bar;