我写过(使用网上偷看)我的通用方法来获取类名的属性。这是代码。
属性:
[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
投射到我的属性?
答案 0 :(得分:3)
您只需要T
的约束为Attribute
。您收到编译器错误,因为T
可能是任何无法转换为Attribute
类型的内容。
public T GetAttributeOfObject<T>(Type objectTypeToCheck) where T: Attribute
{
return (T)Attribute.GetCustomAttribute(objectTypeToCheck, typeof(T));
}