■ 定義
* Flags属性([Flags])を付与する
サンプル
[Flags] public enum SampleEnum { None = 0, Sample1 = 1, Sample2 = 2, Sample3 = 4, }
■ フラグ操作
フラグを立てる
* |演算子(OR演算子) を使うサンプル
[Flags] public enum Week { Sunday = 0x001, Monday = 0x002, Tuesday = 0x004, Wednesday = 0x008, Thursday = 0x010, Friday = 0x020, Saturday = 0x040 } var flag = Week.Saturday; flag = flag | Week.Sunday;
フラグを下す
* &演算子(AND演算子) と ~演算子(反転演算子) の組み合わせサンプル
var flag = Week.Saturday | Week.Friday; flag = flag & ~Week.Friday;}
■ 関連メソッド
Enum.HasFlag()
* From .NET Framework4 * 指定したビットフィールドが設定されているかどうかを判断するEnum.HasFlag メソッドが追加されたサンプル
enum Country { Japan, Italy, US, Korea, India, Australia, Brazil, } private void button1_Click(object sender, EventArgs e) { this.label1.Text = string.Empty; Country myStayed = Country.Japan | Country.Italy | Country.Korea; if (myStayed.HasFlag(Country.Korea)) { this.label1.Text += "\n韓国に行った事あるの!?"; } if (myStayed.HasFlag(Country.Japan | Country.Italy)) { this.label1.Text += "\nイタリアと日本に行った事あるの!?"; } if (myStayed.HasFlag(Country.Japan | Country.Brazil)) { this.label1.Text += "\nブラジルに行った事あるの!?"; } }
従来との比較
* 大分すっきりした感がある.NET Framework4以前
if ((myStayed & (Country.Japan | Country.Italy)) == (Country.Japan | Country.Italy)).NET Framework4
if (myStayed.HasFlag(Country.Japan | Country.Italy))
参考文献
https://garafu.blogspot.com/2015/07/c-enum-flag-howtouse.htmlhttp://www.atmarkit.co.jp/fdotnet/dotnettips/1052enumflags/enumflags.html