为什么Nullable不是有效的自定义属性参数,而T是?如果我有像这样的枚举publicenumHunger{Somewhat,Very,CouldEatMySocks}和像这样的自定义属性publicclassHungerAttribute:Attribute{publicHungryHungerLevel{get;放;}公共饿了吗?NullableHungerLevel{得到;放;我可以做到这一点[Hunger(HungerLevel=Hungry.CouldEatMySocks)]publicclassThing1但我不能做到这一点[Hunger(NullableHungerLevel=Hungry.CouldEatMySocks)]publicclassThing2它生成一个错误说“'NullableHungerLevel'isnot一个有效的命名属性参数,因为它不是一个有效的属性参数类型”。为什么不允许这样做?据我所知,从根本上说,它不在可接受的类型列表中。有效类型似乎是基元、枚举、字符串、类型和上述类型的一维数组。是不是Nullable出来的时候没有更新的老规矩?饥饿?EqualsNullable,对于其中[Hunger(NullableHungerLevel=Hungry.CouldEatMySocks)]等于[Hunger(NullableHungerLevel=newNullable(Hungry.CouldEatMySocks))]由于在命名属性参数中只能使用常量值,因此必须使用Shimmy的解决方案。要解决此问题,请在属性中创建另一个初始值设定项:_饥饿等级;公共饥饿?饥饿等级{得到{返回_HungerLevel;}}publicboolIsNull{get{return!_HungerLevel.HasValue;}}publicHungerAttribute(){}//或者:publicHungerAttribute(饥饿等级){_HungerLevel=level;}}publicenumHungry{Somewhat,Very,CouldEatMySocks}}我知道你不会同时使用这两个属性。属性只能有参数基元、类型表达式和数组创建表达式。可空是一个结构。所以那里不允许。我怀疑程序集文件格式本身不允许存储结构等复杂类型来代替属性值。我不知道有任何改变它的计划。但我无法解释为什么存在这种限制。您可以为该枚举创建一个默认值,而不是创建一个可为null的枚举。枚举从第一个值中选择默认值,因此像这样设置枚举分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——if(default(Hungry)==HungerLevel)//没有设置值本文为网络收集,不代表侵权,请点击右边联系管理员删除。如需转载请注明出处:
