簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM