[英]Why does HasFlag extension method on Enum trump Enum.HasFlag?
[英]HasFlag with a generic enum?
我剛開始使用 C# 中的Generics
,但很早就遇到了問題,如何在泛型Enum
上調用.HasFlag()
?
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 ...
}
如果您使用不是枚舉的值類型調用該方法,這將在運行時引發異常。 您還可以通過ValueType
而不是object
,因為已知類型參數表示值類型:
Enum castValue = (Enum)(ValueType)enumValue;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.