■77090 / inTopicNo.6) |
Re[3]: C#の&演算子について |
□投稿者/ 魔界の仮面弁士 (487回)-(2015/09/10(Thu) 11:05:49)
|
■No77088 (ぶなっぷ さん) に返信 > このようなenumがあるとして、 > enum Live > { > Eat = 0x01, // 食う > Sleep = 0x02, // 寝る > Play = 0x04, // 遊ぶ > Work = 0x10, // 働く > };
本題からは少し外れますが、上記のように「ビットフラグ」として管理される列挙体には、 FlagsAttribute を付与するのが慣わしとなっています。具体的にはこういう定義になりますね。
[Flags] enum Live { Eat = 0x01, // 食う Sleep = 0x02, // 寝る Play = 0x04, // 遊ぶ Work = 0x10, // 働く };
// -----------------
Live hate = Live.Work; Console.WriteLine(hate.ToString("G"));
Live love = Live.Eat | Live.Sleep | Live.Play; Console.WriteLine(love);
[Flags] の属性指定がある場合には、それぞれ "Work" および "Eat, Sleep, Play" と表示されますが、 [Flags] の属性指定が無い場合には、それぞれ "Work" および "7" と表示されることになります。
参考情報:FlagsAttribute を付与するかどうかのガイドラインとして。 http://smdn.jp/programming/netfx/enum/1_flags/
> if((Live & Live.Eat) > 0) // &はこんな感じで使う 既に指摘されていますが、ここは > では無い方が良いですね。
ちなみに .NET 4 以降においては、上記を if (Live.HasFlag(this.Live)) と書けるようになっています。
|
|