我想将我的枚举创建为可空,而不是添加默认值为0的默认条目。
但是,在以下情况中,我会遇到语法错误,我无法理解为什么,或者目前如何修复它。它可能很简单,但最简单的事情......
在这里,我的属性将枚举视为可以为空:
public Gender? Gender { get; private set; }
public MaritalStatus? MaritalStatus { get; private set; }
这是一个给我语法错误的方法,即性别不包含...,MaritalStatus不包含...:
string GetTitle()
{
if (Gender == null || MaritalStatus == null)
return null;
if (Gender == Gender.M) // Error here!
return "Mr";
else if (
MaritalStatus == MaritalStatus.Married ||
MaritalStatus == MaritalStatus.Separated ||
MaritalStatus == MaritalStatus.Widowed) // Error here!
return "Mrs";
else
return "Ms";
}
任何建议表示赞赏。
答案 0 :(得分:4)
您有枚举MaritalStatus
和Gender
。同时,您拥有名为MaritalStatus
和Gender
的属性。你需要避免这种情况。
这里:
if (Gender == Gender.M)
if (MaritalStatus == MaritalStatus.Married)
语法不正确,因为Gender
和MaritalStatus
被识别为变量,但不是类型。
此外,您需要使用.Value
来访问值Nullable
。
因此,您可以明确指定命名空间:
if (Gender.Value == YourNamespace.Gender.M)
if (MaritalStatus.Value == YourNamespace.MaritalStatus.Married)
但我强烈建议您将您的枚举重命名为GenderEnum
和MaritalStatusEnum
。
这个问题可以在这里重现:
enum SameName { Value }
class Tester
{
void Method1() {
SameName SameName;
SameName test = SameName.Value; // Works!
}
void Method2() {
string SameName;
SameName test = SameName.Value; // Doesn't work! Expects string method Value
}
}
在this answer Eric Lippert描述了这个原因:
C#被设计为在名称与其类型相同的属性面前是健壮的,因为这很常见:
class Shape
{
public Color Color { get; set; }
...
如果你有一个Color类型,那么拥有一个名为Color的属性是很常见的,并且没有好的方法来重命名它们。因此,C#旨在合理地优雅地处理这种情况。
因此,如果您的变量属于Enum
类型,则它引用枚举成员; else - 它指的是变量。 Enum?
属于"其他"。