等效于自定义属性的类型(类)

本文关键字:类型 自定义属性 | 更新日期: 2023-09-27 17:56:44

自定义属性是否有等效的typeof( )

具体来说,我想以不依赖字符串比较的方式重写此代码

if (prop.GetCustomAttributes(true).Any(c => c.GetType().Name == "JsonIgnoreAttribute")) { ... }

等效于自定义属性的类型(类)

有一个重

GetCustomAttributes 将您想要的类型作为参数:

prop.GetCustomAttributes(typeof(JsonIgnoreAttribute), true)

但是,当您实际检查属性是否存在时,您应该使用 IsDefined 函数:

if (Attribute.IsDefined(prop, typeof(JsonIgnoreAttribute), true))

这不会实例化属性,因此性能更高。

如果你不需要继承参数,你可以写:

if (prop.IsDefined(typeof(JsonIgnoreAttribute)))

出于某种原因,在属性和事件的MemberInfo.IsDefined函数中忽略此参数,但在 Attribute.IsDefined 中考虑了此参数。去图。

请注意,任何可分配给JsonIgnoreAttribute的类型都将由这些函数匹配,因此也将返回派生类型。


作为旁注,您可以像这样直接比较Type对象:
c.GetType() == typeof(JsonIgnoreAttribute)(是完全相同的类型吗?
c is JsonIgnoreAttribute(类型是否可分配

使用 typeof() 有什么问题? 或者更好的是,is

if (prop.GetCustomAttributes(true).Any(c => c is JsonIgnoreAttribute))

您还可以执行以下操作:

if (prop.GetCustomAttributes(true).OfType<JsonIgnoreAttribute>().Any())

if (prop.GetCustomAttributes(typeof(JsonIgnoreAttribute), true).Any())