如果我有这样的枚举
public enum Hungry
{
Somewhat,
Very,
CouldEatMySocks
}
和这样的自定义属性
public class HungerAttribute : Attribute
{
public Hungry HungerLevel { get; set; }
public Hungry? NullableHungerLevel { get; set; }
}
我能做到
[Hunger(HungerLevel = Hungry.CouldEatMySocks)]
public class Thing1
可是我做不到
[Hunger(NullableHungerLevel = Hungry.CouldEatMySocks)]
public class Thing2
它生成一个错误,指出“'NullableHungerLevel' 不是有效的命名属性参数,因为它不是有效的属性参数类型”。
为什么不允许?我知道从根本上说它不在可接受的类型列表中。有效类型似乎是基元、枚举、字符串、类型和上述类型的一维数组。
这只是一个旧规则,在 Nullable 出现时没有更新吗?
最佳答案
Hungry?
等于Nullable<Hungry>
, 这意味着
[Hunger(NullableHungerLevel = Hungry.CouldEatMySocks)]
等于
[Hunger(NullableHungerLevel = new Nullable<Hungry>(Hungry.CouldEatMySocks))]
由于您只能在命名属性参数中使用常量值,因此您将不得不求助于 Shimmy 的解决方案。
关于c# - 为什么 Nullable<T> 不是有效的自定义属性参数,而 T 是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416126/