2

私は c# で asmx Web サービスを使用しており、最近FlagsAttribute列挙型に非常に役立つことを発見しました。私の宣言は次のとおりです。

[Flags] 
public enum eAdPriority
{
    None = 0,
    Gold = 1,
    Silver = 2,
    Homepage = 4
}

次に、次のように列挙型をテストします。

eAdPriority test = eAdPriority.Gold | eAdPriority.Homepage | eAdPriority.Silver;
test.HasFlag(eAdPriority.Gold);

ただし、HasFlag最後の行の一部が赤く強調表示されていますシンボル 'HasFlag'を解決できず、コードがコンパイルされません。理由はありますか?

4

1 に答える 1

3

Enum.HasFlag.NET Framework 4.0 以降でのみ使用できます。.NET Framework 3.5 を使用している場合は、この記事の拡張メソッドを含めて、HasFlag 機能を模倣できます。完全を期すために、ここにコードを示します (クレジットは記事の著者に帰属します)。

    public static bool HasFlag(this Enum variable, Enum value)
    {
        // check if from the same type.
        if (variable.GetType() != value.GetType())
        {
            throw new ArgumentException("The checked flag is not from the same type as the checked variable.");
        }

        Convert.ToUInt64(value);
        ulong num = Convert.ToUInt64(value);
        ulong num2 = Convert.ToUInt64(variable);

        return (num2 & num) == num;
    }
于 2014-10-29T10:42:11.183 に答える