C# 动态对象初始值设定项无法编译

发布于 2024-10-03 08:10:28 字数 362 浏览 1 评论 0原文

下面的代码对我来说似乎是合理的。它应该创建对象,然后使用动态功能让我分配我喜欢的任何属性。然而编译器说“ExpandoObject 不包含 Test 的定义”。对此我说:“我知道,这就是问题所在!”

dynamic example = new ExpandoObject
{
  Test = "fail"
};

任何想法为什么 csc 不允许这样做。

另一种方法是手动将代码扩展为单独的属性分配。

dynamic example = new ExpandoObject();
example.Test = "fail";

当我有很多属性要分配时,这很烦人。

The following code seems reasonable to me. It should create the object and then use the dynamic features to let me assign any properties I like. However the compiler says that "ExpandoObject does not contain a definition for Test". To which I say, "I know, that's the freaking point!"

dynamic example = new ExpandoObject
{
  Test = "fail"
};

Any ideas why csc isn't allowing this.

The alternative is to manually expand the code into individual property assignments.

dynamic example = new ExpandoObject();
example.Test = "fail";

Which is annoying when I have lots of properties to assign.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

断桥再见 2024-10-10 08:10:28

在对象初始值设定项中,类型为 ExpandoObject,而不是 dynamic,因此您无法获得动态功能。 初始化程序之后,您正在操作动态类型的变量,因此动态功能在这里可用。

Within the object initializer, the type is ExpandoObject, not dynamic, so you don't get dynamic functionality. After the initializer, you are operating on a variable of type dynamic and so dynamic functionality is available there.

羞稚 2024-10-10 08:10:28

在第一个示例中,C# 编译器将在 ExpandoObject 上查找名为 Test 的属性。它不存在。

在第二个示例中,编译器将在动态对象上查找 Test 属性。这是允许的,因此可以编译。

In your first example, the C# compiler will look for a property named Test on the ExpandoObject. It doesn't exist.

In your second example, the compiler will look for a Test property on a dynamic object. This is allowed, so it compiles.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文