You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#自定义属性反射疑问:两种反射方式为何结果不同?

为什么两种反射调用获取的自定义属性结果不一样?

其实这俩调用本质上是在查询完全不同的对象,结果自然天差地别:

  • 第一种调用 foo.GetType().GetProperty("CurrentDate").GetCustomAttributes(true):
    你先通过foo.GetType()拿到了Foo类的类型信息,接着GetProperty("CurrentDate")是精准定位到Foo类里名为CurrentDate的那个属性成员,最后调用GetCustomAttributes是在问「这个属性成员身上贴了哪些自定义属性?」——这完全命中了你要找的MyAttribute,所以能拿到预期结果。

  • 第二种调用 foo.CurrentDate.GetType().GetCustomAttributes(true):
    foo.CurrentDate是你从Foo实例里取出的属性值,这个值的类型是DateTime,所以GetType()拿到的是.NET原生的System.DateTime类型的信息。此时调用GetCustomAttributes,是在问「DateTime这个类型本身有哪些自定义属性?」——这和你Foo类里的属性成员半毛钱关系都没有,返回的自然是DateTime类型自带的原生属性了。

打个通俗的比方:你有个收纳盒(Foo类),在盒子的「日期格」(CurrentDate属性成员)上贴了个专属贴纸(MyAttribute)。第一种方式是直接掀开盒子看「日期格」上的贴纸;第二种方式是先把「日期格」里的东西(DateTime值)拿出来,然后去看这个东西本身的标签——那当然看不到你贴在盒子格子上的贴纸啦!

内容的提问来源于stack exchange,提问作者JohanP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:43:07