我有一個泛型類型,應該指定Enum
類型(實際上,它是幾個指定的枚舉之一,但我會解決System.Enum
)。限制泛型類型參數System.Enum
當然編譯器在如下代碼不太願意:
class Generic<T> where T : Enum {}
與「約束不能特殊類的System.Enum'」例外。
唯一的解決辦法,我已經能夠拿出迄今是使用靜態類型初始化檢查的類型參數,並拋出一個異常,如果它不是,事實上,一個枚舉,像這樣:
class Generic<T>
{
static Generic()
{
if (typeof(T).BaseType != typeof(Enum))
throw new Exception("Invalid Generic Argument");
}
}
它至少爲我提供了運行時安全性,它不會使用非枚舉參數。然而,這感覺有點不好意思,那麼有沒有更好的方法來完成這個,理想情況下使用編譯時構造?
可能重複(http://stackoverflow.com/questions/7244/anyone-know-a-good-workaround-for- enum-generic-constraint) – nawfal