等效于自定义属性的类型(类)
本文关键字:类型 自定义属性 | 更新日期: 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())