c# - 为什么 Nullable<T> 不是有效的自定义属性参数,而 T 是?

标签 c# attributes nullable

如果我有这样的枚举

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/

相关文章:

c# - 执行停止无一异常(exception)

c# - Rsa加密解密中的错误长度错误

javascript - 在 javascript 对象中,获取值的属性的最佳方法是什么?

objective-c - 使用nonnull时没有警告?

objective-c - 从可空对象转换为非空对象 (Objective-C)

c# - 使用 Expando 对象时如何将类型设置为可为空

c# - 将一个字符串拆分为 2 个字符串

c# - C# 中的神秘行

.net - 限制自定义属性的属性类型

iOS:CTFramesetterCreateWithAttributedString 导致 EXC_BAD_ACCESS,任何猜测原因?