How toenumerate C#enum

C# 言語ではEnumが広く使われています。

そして、enumerateenum inC# の4つの方法があります。

1.C# Enum.GetValues() を .Net 5 以上で使用する。 2.古い.NetのバージョンでC# Enum.GetValues() を使用する。 3.C# Enum.GetNames() を使用して、enum enum の名前を文字列として消去する。 4.使用方法Linq

さらに理解するために例を見てみましょう。

まず、C#の enum

public enum LogLevel
{
   ERROR, 
   WARN, 
   INFO, 
   DEBUG
}

があります。 enumは、さまざまなタイプのロギングレベルを表します。

今度は、enumerate のさまざまな方法について見ていきます。 C# enum.

C# Enum.GetValues() .Net 5 以上で Generic メソッドを使用する

.Net の最新版、すなわち.Net 5 以上を使用している場合、Enum.GetValues メソッドに汎用版を使用して、enumを消去することができます。 C# enum.

void loopEnum()
{
   LogLevel[] logLevels = Enum.GetValues<LogLevel>();
   
   foreach (LogLevel logLevel in logLevels)
   {
        Console.WriteLine(logLevel.ToString());
   }
}

新しい汎用版Enum.GetValues は、enum の値の配列を返します。

さらに、for またはforeach ステートメントを使用して、名前をリストアップすることができます。 C# enumの名前をリストアップすることができます。

配列は型を含んでいるので enumを含むので、ToString() メソッドを使って文字列に変換する必要があります。

古いバージョンの.Netでは、C# Enum.GetValues()

古いバージョンの.Net では、Enum.GetValues() メソッドで利用できるジェネリックメソッドがありません。

Enum.GetValues() メソッドにパラメータとしてtypeof() enum を渡す必要があります。

Array logLevels = Enum.GetValues(typeof(LogLevel))

そしてそれはSystem.Array 型のenum 値を返し、さらにforeach ステートメントを使って C# enumの名前をループすることができます。

void loopEnum()
{
   Array logLevels = Enum.GetValues(typeof(LogLevel))
   foreach (LogLevel logLevel in logLevels)
   {
        Console.WriteLine(logLevel.ToString());
   }
}

もし、IEnumerable の結果が欲しいなら、さらにEnum.GetValues() メソッドをキャストすればよい。

void loopEnum()
{
   var logLevels = Enum.GetValues(typeof(LogLevel)).Cast<LogLevel>();
   foreach (LogLevel logLevel in logLevels)
   {
        Console.WriteLine(logLevel.ToString());
   }
}

C# Enum.GetNames() を使ってenumを消すenum 名前を文字列にする

C# Enum.GetValues() メソッドはenum 型の配列を返します。

そのため、enum の名前を文字列に変換してからコンソールに出力しています。

C# Enum.GetNames() メソッドを使うと、enumerateenum の名前を文字列として出力できるので、文字列に変換する必要はありません。

.Net 5 以上をお使いの方は、汎用関数C# Enum.GetNames() をお使いください。

void loopEnum()
{
   string[] logLevels = Enum.GetNames<LogLevel>();
   
   foreach (string logLevel in logLevels)
   {
        Console.WriteLine(logLevel);
   }
}

古いバージョンでは、typeof() enum パラメータを渡す必要があります。

void loopEnum()
{
   string[] logLevels = Enum.GetNames(typeof(LogLevel));
   foreach (string logLevel in logLevels)
   {
        Console.WriteLine(logLevel);
   }
}

もし、enumの名前を文字列で表示したい場合は、C# Enum.GetNames() メソッドを使用することができます。

使用方法Linq

Linq forEach メソッドを使用すると、C#enum をEnum.GetValues()Enum.GetNames() メソッドの助けを借りて、enumerate することができます。

.Net 5 以上では、以下のコードスニペットを使用してください。

//Using Enum.GetValues
Enum.GetValues<LogLevel>()
        .ToList()
        .ForEach(loglevel => Console.WriteLine(loglevel.ToString()));

//Using Enum.GetNames
Enum.GetNames<LogLevel>()
        .ToList()
        .ForEach(loglevel => Console.WriteLine(loglevel));        

古いバージョンでは

//Using Enum.GetValues
Enum.GetValues(typeof(LogLevel))
    .Cast<LogLevel>().ToList()
    .ForEach(loglevel => Console.WriteLine(loglevel.ToString()));

//Using Enum.GetNames
Enum.GetNames(typeof(LogLevel))
    .ToList()
    .ForEach(loglevel => Console.WriteLine(loglevel));    

概要

enum このチュートリアルでは、C# でEnum.GetValues()Enum.GetNames() メソッドを使ってenumを作成することを学びました。