我经常发现自己实现了一个类,将自己的某种status属性作为枚举进行维护:我有一个status枚举和一个status类型的status属性.我应该如何解决这个名称冲突?

public class Car
{
  public enum Status
  {
    Off,
    Starting,
    Moving
  };

  Status status = Status.Off;

  public Status Status // <===== Won't compile =====
  {
    get { return status; }
    set { status = value; DoSomething(); }
  }
}

如果状态枚举对不同的类型是通用的,我会把它放在类之外,问题就会解决.但是Status只适用于Car,因此在类之外声明enum是没有意义的.

在这种情况下,您使用什么命名约定?

注:这个问题在回答this question的 comments 中进行了部分讨论.因为这不是main题,所以没有太大的可见度.

编辑:菲利普·埃克伯格(Filip Ekberg)建议国际海事组织(IMO)针对"状态"这一特定情况提供一个极好的解决方案.然而,我很有兴趣阅读有关枚举/属性名称不同的解决方案,如Michael Prewecki的answer.

EDIT2(2010年5月):我最喜欢的解决方案是将枚举类型名称复数,就像Chris S建议的那样,根据MS指南,这应该只用于标志枚举.但是我越来越喜欢它了.我现在也将它用于常规的枚举.

推荐答案

我会在讨论中加入我的1欧元,但它可能不会增加任何新内容.

显而易见的解决方案是将状态从嵌套枚举中移除.最NET枚举(可能除了Windows.Forms命名空间中的某些枚举)不是嵌套的,这让使用API的开发人员感到恼火,因为他们必须在类名前加前缀.

One thing that hasn't been mentioned表示,根据MSDN指南,标志枚举应该是be pluralized nouns,您可能已经知道了(状态是一个简单的枚举,所以应该使用单数名词).

State(enum称为States)是呼语,"Status"是名词的主格,英语和我们的大多数语言一样,从拉丁语中吸收了这个名词.呼格是你根据名词的条件给它命名,而主格是动词的主语.

换句话说,当汽车行驶到is moving英里时,这就是动词——移动就是它的状态.但汽车不会熄火,发动机会熄火.它也不会启动,引擎会启动(你可能在这里举了一个例子,所以这可能无关紧要).

public class Car
{
  VehicleState _vehicleState= VehicleState.Stationary;

  public VehicleState VehicleState 
  {
    get { return _vehicleState; }
    set { _vehicleState = value; DoSomething(); }
  }
}

public enum VehicleState
{
    Stationary, Idle, Moving
}

State是这样一个泛化的名词,描述它指的是哪个州不是更好吗?就像我在上面做的那样

在我看来,类型示例也不是指reader类型,而是指它的数据库.如果您描述的是阅读器的数据库产品,而该产品不一定与阅读器的类型相关(例如,阅读器的类型可能是仅转发、缓存等).所以

reader.Database = Databases.Oracle;

事实上,这种情况从未发生过,因为它们是作为驱动程序和继承链实现的,而不是使用枚举,这就是为什么上面这一行看起来并不自然.

.net相关问答推荐

在平板电脑上运行我的 Angular 13 和 .Net Api 项目时,它不会向 api 输入请求

为什么 PropertyInfo.SetValue 在此示例中不起作用以及如何使其起作用?

向从 .NET 序列化的对象添加 Xml 属性

在 .NET 中使用 AES 解密时缺少后半字节

如何找到windows服务exe路径

整个命名空间的SuppressMessage

.Include() 与 .Load() 在 EntityFramework 中的性能

Int32.ToString() 是特定于文化的吗?

异步总是 WaitingForActivation

使用 .NET 在 Windows 中创建弹出式 toastr 通知

如何从字符串中删除所有字母字符?

如何正确停止BackgroundWorker

如何对无法加载的 VSTO 插件进行故障排除?

您可以在 C# 代码中捕获本机异常吗?

C# 测试字符串是否为整数?

析构函数、dispose 和 finalize 方法的区别

如何过滤具有多个条件的 Directory.EnumerateFiles?

在 WPF DataGrid 中绑定 ComboBoxColumn 的 ItemsSource

枚举和匹配属性的 C# 命名约定

无法添加对 dll 的引用