319

同様のことを読んだにもかかわらず、この質問をしていますが、列挙型と一致するプロパティのC#命名規則で私が望むものとはまったく異なります

列挙型に複数の名前を付けてから、それらを単数として「使用」する傾向があることがわかりました。例:

public enum EntityTypes {
  Type1, Type2
}

public class SomeClass {
  /*
    some codes
  */

  public EntityTypes EntityType {get; set;}

}

もちろんそれは機能し、これが私のスタイルですが、そのような慣習で潜在的な問題を見つけることができる人はいますか? ただし、「ステータス」という単語を使用した「醜い」命名があります。

public enum OrderStatuses {
  Pending, Fulfilled, Error, Blah, Blah
}

public class SomeClass {
  /*
    some codes
  */

  public OrderStatuses OrderStatus {get; set;}

}

追加情報: 多分私の質問は十分に明確ではありませんでした. 定義した列挙型の変数に名前を付けるときは、よく考えなければなりません。私はベスト プラクティスを知っていますが、それらの変数に名前を付けるという私の仕事を容易にするのには役立ちません。

すべての列挙型プロパティ ("Status" など) を "MyStatus" として公開することはできません。

私の質問: 上記の私の慣習で潜在的な問題を見つけられる人はいますか? それはベストプラクティスに関するものではありません。

質問の言い換え:

さて、私はこのように質問する必要があると思います:誰かが列挙型に名前を付ける良い一般的な方法を見つけて、使用すると列挙型の「インスタンス」の命名が非常に簡単になりますか?

4

10 に答える 10

385

Microsoft は、がビット フィールドを表す場合をEnum除き、単数形の sを使用することをお勧めします (同様に使用します)。Enumeration Type Naming Conventions (Microsoft のNaming Guidelinesのサブセット) を参照してください。EnumFlagsAttribute

あなたの説明に答えるために、私は次のいずれにも問題はないと思います:

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass { 
    public OrderStatus OrderStatus { get; set; }
}

また

public enum OrderStatus { Pending, Fulfilled, Error };

public class SomeClass {
    public OrderStatus Status { get; set; }
}
于 2009-09-10T15:08:23.263 に答える
46

複数形の列挙型の命名を開始しましたが、その後単数形に変更されました。それらが使用されている場所のコンテキストでは、より理にかなっているようです。

enum Status { Unknown = 0, Incomplete, Ready }

Status myStatus = Status.Ready;

比較:

Statuses myStatus = Statuses.Ready;

単数形の方が文脈上、より自然に聞こえると思います。ある場所で発生する列挙型を宣言するとき、「これは何かのグループである」と考えていますが、おそらく多くの場所でそれを使用するときは、「これは何でもある」と考えていることに同意します。 .

于 2009-09-10T15:08:29.600 に答える
31

この状況は実際には複数形には当てはまりません。

Anenumは何かの属性を示します。例を挙げます:

enum Humour
{
  Irony,
  Sarcasm,
  Slapstick,
  Nothing
}

1 つのタイプを持つこともできますが、複数形ではなく複数形で考えてみてください。

Humour.Irony | Humour.Sarcasm

それよりも

Humours { Irony, Sarcasm }

あなたにはユーモアのセンスがありますが、ユーモアのセンスはありません。

于 2009-09-10T15:13:35.047 に答える
16

一般に、推奨されるベスト プラクティスは単数形です。ただし、[Flags] 属性が付加されている (したがってビット フィールドを含むことができる) 列挙型は複数形にする必要があります。

編集した質問を読んだ後、プロパティ名または変数名は列挙型名とは異なる必要があると思うかもしれません...そうではありません。以下はまったく問題ありません...

  public enum Status { New, Edited, Approved, Cancelled, Closed }

  public class Order
  {
      private Status stat;
      public Status Status
      { 
         get { return stat; }
         set { stat = value; }
      }
  }
于 2009-09-10T15:08:05.543 に答える
7

次のような簡単でありながら禁止されているコードを記述しようとしている場合:

    public class Person
    {
        public enum Gender
        {
            Male,
            Female
        }
        //Won't compile: auto-property has same name as enum
        public Gender Gender { get; set; }  
    }

オプションは次のとおりです。

  1. MS の推奨事項を無視して、列挙名にプレフィックスまたはサフィックスを使用します。

    public class Person
    {
        public enum GenderEnum
        {
            Male,
            Female
        }
        public GenderEnum Gender { get; set; }
    }
    
  2. 列挙型の定義をクラスの外、できれば別のクラスに移動します。上記の簡単な解決策は次のとおりです。

    public class Characteristics
    {
        public enum Gender
        {
            Male,
            Female
        }
    }
    public class Person
    {
        public Characteristics.Gender Gender { get; set; }  
    }
    
于 2012-08-05T21:49:17.387 に答える
6

ベスト プラクティス - 単数形を使用します。Enum を構成するアイテムのリストがあります。リスト内の項目を使用すると、 と言うと奇妙に聞こえますVersions.1_0Version.1_01_0 バージョンは 1 つしかないので、言う方が理にかなっています。

于 2009-09-10T15:12:19.340 に答える
6

少し遅れて到着...

あなたの質問とあなたが言及したものとの間には重要な違いがあります(私が尋ねました;-):

列挙型定義をクラスの外に置くと、列挙型とプロパティに同じ名前を付けることができます。

public enum EntityType { 
  Type1, Type2 
} 

public class SomeClass { 
  public EntityType EntityType {get; set;} // This is legal

}

この場合、MS のガイドラインに従い、列挙型に単数形の名前を使用します (複数形はフラグ)。それはおそらく最も簡単な解決策です。

私の問題(他の質問)は、列挙型がクラスのスコープで定義されている場合に、列挙型の直後に名前が付けられたプロパティを使用できないことです。

于 2011-10-03T13:26:55.240 に答える
0

他のスレッドでは、列挙型と一致するプロパティの C# 命名規則について、誰かが私が非常に良い考えだと思うことを指摘しました。

「私の提案が .NET の命名規則に反することは承知していますが、私は個人的に、列挙型の前に 'E' を、列挙型フラグの前に 'F' を付けています (インターフェイスの前に 'I' を付けるのと同様です)。

于 2010-04-15T14:39:51.607 に答える