可以按位或枚舉。通常這是在Flags枚舉上完成的。使用泛型的按位或枚舉枚舉
例如var foo = MyEnum.ABC | MyEnum.XCN
我試圖創建一個方法轉換枚舉的陣列成使用泛型組合枚舉。
這是我曾嘗試:
private T CombineFlags<T>(params T[] flags) where T : struct, IConvertible
{
return flags.Select(flag => flag).Aggregate((x, y) => x | y);
}
但是,我不能申請運營商「\」到T和T.鑄造似乎並沒有幫助。 struct, IConvertible
似乎是最接近枚舉的,但顯然不夠接近使用'|'運營商。 System.Enum也不是很有幫助。
如何在泛型枚舉上執行此操作? (是否有可能?)
你不能 - 運算符是靜態的,編譯器無法猜測T的傳入 - 它們可能不支持'|'運算符。 –
您可以嘗試的一件事是將值轉換爲「long」,執行操作並將其轉換回來。 –