Tag: 扩展对象

为什么我不能这样做:dynamic x = new ExpandoObject {Foo = 12,Bar =“twelve”}

我做错了什么,或者是下面的代码真的不可能? dynamic x = new ExpandoObject { Foo = 12, Bar = "twelve" }; 如果这是不可能的,是否有另一种单行的方式来实例化具有两个属性的ExpandoObject? 为什么C#团队会select禁用与常规对象,匿名对象和枚举/列表相同的初始化语法? 更新 我问这个问题是因为我试图向Pearl发烧友展示C#的新dynamic特性,但后来因为无法做到我认为是ExpandoObject的逻辑实例而停滞不前。 感谢Hans Passant的回答,我意识到ExpandoObject是这个工作的错误工具。 我真正的目标是使用C#的dynamic特性从方法返回两个命名值。 正如汉斯所指出的那样, dynamic关键字是完美的。 我不需要一个具有所有开销的ExpandoObject来执行此操作。 所以,如果你想从一个方法中返回一对命名值,并且你不关心types安全,Intellisense,重构或者性能,这个工作方式非常好: public dynamic CreateFooBar() { return new { Foo = 42, Bar = "Hello" }; } 用法: dynamic fooBar = CreateFooBar(); var foo = fooBar.Foo; var bar = fooBar.Bar;

如何检测ExpandoObject上是否存在属性?

在JavaScript中,您可以使用undefined关键字来检测属性是否被定义: if( typeof data.myProperty == "undefined" ) … 你将如何在C#中使用dynamic关键字与ExpandoObject做到这一点,而不会引发exception?

dynamic地将属性添加到ExpandoObject

我想在运行时dynamic地将属性添加到ExpandoObject。 所以,例如添加一个string属性调用NewProp我想写的东西 var x = new ExpandoObject(); x.AddProperty("NewProp", System.String); 这很容易吗?