转换:从Objecttypes检索的System.Attribute

时间:2015-02-11 13:14:29

标签: c# .net reflection casting

我写过(使用网上偷看)我的通用方法来获取类名的属性。这是代码。

属性:

[System.AttributeUsage(System.AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class FileType : Attribute
{
    public String TypeName { get; set; }
}

实施

[FileType (TypeName ="wordFile")]
public class BudFile
{ ... }

我的通用方法

    public T GetAttributeOfObject<T>(Type objectTypeToCheck)
    {
        object myAttribute = (T)Attribute.GetCustomAttribute(objectTypeToCheck, typeof(T));
    }

用法:

BudFile A;
FileType myFileType = GetAttributeOfObject<FileType>(typeof(A));

问题:

我在以下行收到错误Cannot convert type System.Attribute to T

        object myAttribute = (T)Attribute.GetCustomAttribute(objectTypeToCheck, typeof(T));

这是有道理的,因为Attribute.GetCustomAttribute会返回System.Attribute的对象。如何安全将检索到的System.Attribute投射到我的属性?

1 个答案:

答案 0 :(得分:3)

您只需要T的约束为Attribute。您收到编译器错误,因为T可能是任何无法转换为Attribute类型的内容。

public T GetAttributeOfObject<T>(Type objectTypeToCheck) where T: Attribute
{
    return (T)Attribute.GetCustomAttribute(objectTypeToCheck, typeof(T));
}