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 } ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |