C# で複数の列挙値を渡すにはどうすればいいですか? 質問する

C# で複数の列挙値を渡すにはどうすればいいですか? 質問する

他の人の C# コードを読んでいると、1 つのパラメータで複数の列挙値を受け入れるメソッドを目にすることがあります。私はいつもそれがちょっといいなと思っていましたが、詳しく調べたことはありませんでした。

まあ、今は必要かもしれないと思うけど、どうすればいいか分からない

  1. これを受け入れるメソッドシグネチャを設定する
  2. メソッド内の値を操作する
  3. 列挙型を定義する

このようなことを達成するためです。


[Serializable]
[ComVisible(true)]
public enum DayOfWeek
{ 
    Sunday = 0,   
    Monday = 1,   
    Tuesday = 2,   
    Wednesday = 3,   
    Thursday = 4,   
    Friday = 5,    
    Saturday = 6
}

1 つ以上の DayOfWeek 値を自分のメソッドに渡せるようにしたいと考えています。この特定の列挙型をそのまま使用できますか? 上記の 3 つのことを行うにはどうすればよいですか?

ベストアンサー1

enum を定義するときは、[Flags] 属性を付けて、値を 2 の累乗に設定するだけで、このように動作します。

関数に複数の値を渡すこと以外は何も変わりません。

例えば:

[Flags]
enum DaysOfWeek
{
   Sunday = 1,
   Monday = 2,
   Tuesday = 4,
   Wednesday = 8,
   Thursday = 16,
   Friday = 32,
   Saturday = 64
}

public void RunOnDays(DaysOfWeek days)
{
   bool isTuesdaySet = (days & DaysOfWeek.Tuesday) == DaysOfWeek.Tuesday;

   if (isTuesdaySet)
      //...
   // Do your work here..
}

public void CallMethodWithTuesdayAndThursday()
{
    this.RunOnDays(DaysOfWeek.Tuesday | DaysOfWeek.Thursday);
}

詳細については、列挙型に関する MSDN のドキュメント


質問への追加に応じて編集します。

配列/コレクション/パラメータ配列として渡すなどの操作をしない限り、その列挙型をそのまま使用することはできません。これにより、複数の値を渡すことができます。フラグ構文では、列挙型をフラグとして指定する必要があります (または、設計されていない方法で言語を改悪する必要があります)。

おすすめ記事