是否建议使用"Enum"后缀所有C#枚举以避免命名冲突?

Edw*_*uay 15 c# enums naming-conventions

这个stackoverflow问题有一个有趣的讨论,关于如何避免给枚举和属性提供相同的名称,这样你就没有这样的代码:

public SaveStatus SaveStatus { get; set; }
Run Code Online (Sandbox Code Playgroud)

似乎接受的答案建议使用"状态"作为枚举和属性的"状态":

public SaveStatus SaveState { get; set; }
Run Code Online (Sandbox Code Playgroud)

但我认为这很难理解,也不能立即明确什么是什么.

由于这个枚举命名问题是一个不变的问题,我考虑只是总是用"Enum"为我的枚举添加后缀,所以我会这样:

public SaveStatusEnum SaveStatus { get; set; }

SaveStatus = SaveStatusEnum.Succeeded;
Run Code Online (Sandbox Code Playgroud)

有没有人这样做?满意吗?以另一种方式解决了这个问题?

Ryt*_*mis 23

属性命名准则MSDN页面:

考虑创建一个与其基础类型同名的属性.例如,如果声明名为Color的属性,则属性的类型也应为Color.

我认为那是"不":)

编辑:

如果您不喜欢在声明属性的类中使用完全限定名称,则可以解决此问题:

using SaveStatusEnum = MyNamespace.SaveStatus;
...
SaveStatus = SaveStatusEnum.SomeValue;
Run Code Online (Sandbox Code Playgroud)

这样你可以保持枚举名称没有后缀,并将命名奇怪限制在那一个类.:)

  • 该语言有许多精心设计的规则来启用这个场景(我们称之为"颜色颜色场景"),但实际上,存在模糊不可避免的情况.有关详细信息,请参阅C#3.0规范的第7.4.5.1节"相同的简单名称和类型名称". (4认同)

Mic*_*tum 6

.net Framework是否使用Enum作为后缀?不,这就是为什么我也不使用它.

相反,我使用像Option(或选项,如果它是Flags-Enum),模式或类似的单词.

public SaveStatusMode SaveStatus { get; set; }
public SaveStatusOption SaveStatus { get; set; }
public SaveStatusVariant SaveStatus { get; set; }
Run Code Online (Sandbox Code Playgroud)


Joe*_*ite 6

Microsoft的.NET命名准则不提供任何此类建议.

为什么你会避免给枚举和属性提供相同的名称?这个:

public SaveStatus SaveStatus { get; set; }
Run Code Online (Sandbox Code Playgroud)

工作得很好,可读,并且非常易于发现和使用.