gpt4 book ai didi

C# 枚举 VS 可空属性名称冲突

转载 作者:行者123 更新时间:2023-11-30 14:13:22 27 4
gpt4 key购买 nike

this , thisthis关于枚举 VS 属性名称冲突的问题。

我的问题不是关于命名约定,而是我想知道如何解决下面代码中演示的名称冲突:

namespace Test
{
public class Person
{
// 1)
// Gender? Gender { get; set; }

// 2)
Gender Gender { get; set; }

public Person ()
{
// 1 - Error CS1061: Type `Test.Gender?' does not contain a definition for `Male' and no extension method `Male' of type `Test.Gender?' could be found (are you missing a using directive or an assembly reference?) (CS1061) (Test)
// 2 - OK
Gender = Gender.Male;
}
}

public enum Gender
{
Male = 1,
Female
}
}

如果我按照 2) Gender Gender { get;放; } 代码编译成功,但是,如果我声明为 1) Gender?性别{得到;放; (在上面的代码中注释)我得到错误

Error CS1061: Type `Test.Gender?' does not contain a definition for `Male' and no extension method `Male' of type `Test.Gender?' could be found (are you missing a using directive or an assembly reference?) (CS1061) (Test)

为什么会这样?

最佳答案

Gender?表示 Nullable<Gender> ,这意味着当你写 Gender.Male编译器认为您正试图在名为 Male 的属性上调用 getter在 Nullable<Gender> 上实例,即 Gender被解释为对 this.Gender 的读取属性(property)和Male作为名为 Male 的属性的读取根据结果​​。

编译器不会将情况 (2) 识别为错误,因为枚举不能有方法,因此唯一有意义的解决方案是符号是枚举本身。

您可以通过增加名称限定来解决此问题:

namespace Acme.Fruits.Banana
{
...
public Person()
{
Gender = Banana.Gender.Male
}
...
}

关于C# 枚举 VS 可空属性名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386097/

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