为什么C#不允许将通用类型用作通用类中的属性?

时间:2019-01-09 11:38:00

标签: c# generics attributes

这不是一个非常重要的问题,我很好奇为什么不允许这样做。该错误消息无助于解释,因为显然“ Att”确实是从Attribute继承的。

this.props.besvarelsePlagiatstatus.get(70272).erTodeltEksamen

1 个答案:

答案 0 :(得分:2)

必须仅在编译时定义属性,因为它存储在dll或exe中。并且只能包含编译时创建的信息。因此,由于这个原因,它不是通用的。

编译器经常使用属性类型或其值,因此以后不能定义它。

在您的示例中,您想用通用参数标记字段:

public class Generic<Att> where Att : System.Attribute
{
    [Att] //Error: 'Att' is not an attribute class
    public float number;
}

但这等于:

public class Generic<Att> where Att : System.Attribute
{
    [Attribute]
    public float number;
}

因为Att以后无法替换。因此,没有理由为属性使用泛型。