加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#Enum VS Nullable属性名称冲突

发布时间:2020-12-16 09:41:56 所属栏目:百科 来源:网络整理
导读:有关Enum VS Property名称冲突的问题有 this,this和 this. 我的问题不是关于命名约定,而是我想知道如何解决下面代码中演示的名称冲突: namespace Test{ public class Person { // 1) // Gender? Gender { get; set; } // 2) Gender Gender { get; set; } pu
有关Enum VS Property名称冲突的问题有 this,this和 this.

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

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)性别性别{get;组;然而,如果我在1)性别中声明,代码编译成功?性别{get;组; }(在上面的代码中评论)我得到错误

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)

为什么会这样?

解决方法

性别?表示Nullable< Gender>,这意味着当你编写Gender.Male时,编译器认为你试图在Nullable上的名为Male的属性上调用getter< Gender>例如,性别被解释为this.Gender属性和男性的读物,因为其结果是读取了名为Male的属性.

编译器不会将case(2)识别为错误,因为枚举不能有方法,所以唯一有意义的解决方案是符号本身就是枚举.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读