gpt4 book ai didi

c# - 为什么匿名类型没有索引器属性?

转载 作者:行者123 更新时间:2023-11-30 22:02:15 25 4
gpt4 key购买 nike

既然匿名类型无论如何都是编译器生成的,为什么他们不更进一步使用索引器来访问其类似于 ExpandoObject 的属性的值,而是将其静态编码。

一些背景:我目前正在尝试在 microORM 中尽可能地提高性能,有一件事对我很重要:对匿名类型的反射(reflection)。

参数作为对象传入,虽然不需要是匿名类型,但通常是。我必须使用反射来获取每个成员的名称和值,因为匿名类型实际上只是编译器生成的 POCO。

在 C# 中使用 ExpandoObject 和其他一些动态结构后,我发现自己缺少 Expando 的显式 IDictionary 接口(interface)实现。

最佳答案

如果您查看 definition of ExpandoObject ,您会看到它实现了 IDictionary 和 IDynamicMetaObjectProvider(让您的代码 Hook 到 DLR 的神奇部件)。基本上它带来了 Python dictionaries 的力量(Python 中的字典可以通过基于字符串的“索引器”或使用 . 访问器来访问,就好像它是直接在对象上定义的属性(甚至函数)一样)。

匿名类型不是动态的。它们在编译时解决。您不能添加或减去它们的定义。

一般来说,没有对反射 API 的“字典”类型访问,尽管我不明白为什么你不能实现它。 IDictionary 是一个接口(interface)...您可以创建一个 IDictionary 实现,它接受一个对象并使用对该对象的反射来解析索引器请求。

关于c# - 为什么匿名类型没有索引器属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27028693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com