首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么PropertyInfo.SetValue不是泛型方法?

为什么PropertyInfo.SetValue不是泛型方法?
EN

Stack Overflow用户
提问于 2009-08-07 18:37:53
回答 2查看 1.1K关注 0票数 1

我看到签名是:

代码语言:javascript
复制
public virtual void SetValue(object obj, object value, object[] index)

此方法不会导致参数被装箱和取消装箱吗?

为什么这个方法不是被设计成泛型的?然后,它甚至可以由编译器推断,而不会在运行时出现装箱/拆箱损失。

EN

Stack Overflow用户

回答已采纳

发布于 2009-08-07 18:43:42

这在一定程度上是因为PropertyInfo.SetValue早于泛型-反射从一开始就是.NET的一部分。

然而,在这种特定情况下,无论以何种方式使用泛型都是困难的。正如您所建议的,编译器无法推断此信息,因为属性信息是在运行时收集的,而不是在编译时收集的。这就是思考背后的目的。

CLR团队没有尝试将其转换为泛型方法(由于运行时行为,这可能在任何情况下都必须导致非泛型实现),而是确保所有对象(包括值类型)都作为System.Object工作。是的,这会导致装箱,但是使用反射的开销,装箱一个值类型的小额外开销并不真正令人担忧。

票数 9
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1246348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档