如何确定类型是否具有TypeConverterAttribute

时间:2014-03-27 08:37:54

标签: c# types attributes

我有一个类型,我希望在运行时确定它是否具有以下属性:

[TypeConverter(typeof(ExpandableObjectConverter))]

我试图使用:

Attribute.IsDefined(Type attributeType, bool inherit)

但是我在指定此方法的第一个参数时遇到了问题。

如果属性只是[TypeConverter],那么它似乎很简单,但使用

typeof(TypeConverter(typeof(ExpandableObjectConverter))

给出编译时错误。

1 个答案:

答案 0 :(得分:1)

[TypeConverter(typeof(ExpandableObjectConverter))]

此行创建TypeConverterAttribute的对象,ExpandableObjectConverter作为参数(TypeConverterAttribute Constructor),并将其绑定到您的类型。

首先,您将获得已定义的属性。在您的情况下,它是TypeConverterAttribute。 之后,检查属性参数ConverterTypeName

TypeConverterAttribute myAttribute = (TypeConverterAttribute)Attribute.GetCustomAttribute(this.GetType(), typeof (TypeConverterAttribute));
if(myAttribute != null)
{
   String typeName = myAttribute.ConverterTypeName;
   Type t = Type.GetType(typeName);
   if(t == typeof(ExpandableObjectConverter))
   {
       //..
   }
}