我试图实现泛型类。它应该有一个属性,该属性需要一个编译时常量,我想将其设置为参数类型的名称。像这样:
namespace Example
{
public class MyGeneric<T>
{
[SomeAttribute(CompileTimeConstant)]
public int MyProperty { get; set; }
private const string CompileTimeConstant = typeof(T).Name; // error CS0133:
// The expression being assigned to `Example.MyGeneric<T>.CompileTimeConstant' must be constant
}
}
但是因为typeof(T).Name
是在运行时进行评估的,所以它不起作用。有可能吗?
答案 0 :(得分:1)
我不认为这是使用属性的正确方法。属性用于向类添加特定特征。它们是您在编译时添加到类中的标记,以便在运行时查询和使用。您正在尝试在运行时添加属性并使用它如何?为什么要使用属性来保存运行时可用的信息?
可以在运行时轻松查询类型名称。我认为你应该提供更多关于你想要实现什么的信息,否则我认为使用TypeName
属性可能已经足够了。