C#で複数のenum値を渡すには?
C#のコードを読んでいると、1つのパラメータで複数のenum値を受け入れるメソッドを見かけることがあります。私はいつも、ちょっと素敵だなと思いつつも、調べたことはありませんでした。
さて、今、私はそれが必要かもしれないと思うが、どのようにしたらよいかわからない
- これを受け入れるようにメソッドシグネチャを設定する。
- メソッド内で値を操作する
- 列挙型を定義する
というようなことを実現するために
私の特殊な状況で、System.DayOfWeekというのを使いたいのですが、これは以下のように定義されています。
[Serializable]
[ComVisible(true)]
public enum DayOfWeek
{
Sunday = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 3,
Thursday = 4,
Friday = 5,
Saturday = 6
}
メソッドに1つ以上のDayOfWeekの値を渡せるようにしたいのですが、どうすればいいですか?この特定の列挙型をそのまま使用することはできますか?上記の 3 つのことを行うにはどうすればよいですか?
111
3
enumを定義するときに、[Flags]でアトリビュートして、値を2の累乗にすれば、このように動作するようになります。
関数に複数の値を渡す以外は、何も変わりません。
例えば
詳しくは、MSDN'のEnumeration Typesに関するドキュメントを参照してください。
質問への追記に対応して編集しました。
配列/コレクション/パラメータ配列として渡すようなことをしない限り、その列挙型をそのまま使用することはできません。 そうすれば、複数の値を渡すことができます。 flags構文では、Enumをflagsとして指定する必要があります(あるいは、その設計にない方法で言語を改ざんする必要があります)。
Reed'さんの回答に賛成です。 しかし、enum を作成するときに、enum の各メンバーの値を指定して、一種のビットフィールドを作成する必要があります。 例えば
このようなものには、あなたが求めているものが表れているはずです。