gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 04:20:36 25 4
gpt4 key购买 nike

如果我有这样的枚举

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com