私はそれがスポーツと呼ばれていると仮定し、列挙型を持っている:列挙型拡張メソッド
enum Sports
{
Baseball = 1,
Basketball = 2,
Football = 4,
Hockey = 8,
Soccer = 16,
Tennis = 32,
etc...
}
私は基本的に、このようなマスクビットをクリア拡張メソッドを追加したい:
Sports Mask = Sports.Baseball | Sports.Football | Sports.Tennis; //37
Mask.Clear(Sports.Baseball);
// Mask = Football | Tennis
これは私が思いついた拡張方法ですが、うまくいきません。 ClearはMaskに影響しません。値は37のままです。この部分を拡張メソッドから変更できるかどうかはわかりません。これを達成する他の方法はありますか?
public static void Clear<T>(this Enum value, T remove)
{
Type type = value.GetType();
object result;
if (type.Equals(typeof(ulong)))
{
result = Convert.ToUInt64(value) & ~Convert.ToUInt64((object)remove);
}
else
{
result = Convert.ToInt64(value) & ~Convert.ToInt64((object)remove);
}
value = (Enum)Enum.Parse(type, result.ToString());
}
あなたが文字列表現を介して列挙型を表示する予定の場合、それは良いideですa:列挙型定義に '[flags]'属性を追加します。良い説明については、この答えをチェックしてください:http://stackoverflow.com/questions/8447/enum-flags-attribute/8480#8480 –
ありがとう。私は実際のコードに[Flags]タグを持っていますが、私はこれをすばやくハックしました。私の例を実行していたとき、私は "37の代わりに実際の値が表示されないのはなぜですか? "私は[フラグ]を忘れてしまった。 – Mark