私はC#で始めたばかりですが、早い段階で問題が発生しました。ジェネリックGenerics
を呼び出すにはどうすればよいですか?.HasFlag()
Enum
public class Example<TEnum> where TEnum : struct {
}
どうすれば[Flags]
属性を追加できますか?
私はC#で始めたばかりですが、早い段階で問題が発生しました。ジェネリックGenerics
を呼び出すにはどうすればよいですか?.HasFlag()
Enum
public class Example<TEnum> where TEnum : struct {
}
どうすれば[Flags]
属性を追加できますか?
インスタンスメソッドを呼び出すには、とにかくボクシングが必要になります。したがって、に制約することはできないため、Enum
ジェネリックスを破棄してを使用するだけEnum
です。たとえば、次の代わりに:
void Something(TEnum enumValue, TEnum flags)
{
if (enumValue.HasFlags(flags))
//do something ...
}
これを行う:
void Something(Enum enumValue, Enum flags)
{
if (enumValue.HasFlags(flags))
//do something ...
}
一般的な方法では、次のような目標を達成できます。
void Something(TEnum enumValue, TEnum flags)
{
Enum castValue = (Enum)(object)enumValue;
Enum castFlags = (Enum)(object)flags;
if (castValue.HasFlags(castFlags))
//do something ...
}
列挙型ではない値型でメソッドを呼び出すと、実行時に例外がスローされます。typeパラメーターは値型を表すことがわかっているため、ValueType
ではなくviaを使用してキャストすることもできます。object
Enum castValue = (Enum)(ValueType)enumValue;