我需要指定一個泛型類型應該只接受枚舉類型只在關閉類型。任何人都可以建議一種方法來做到這一點,如果約束不起作用?如何將泛型類型的類型參數限制爲除使用約束之外的特定類型?
3
A
回答
2
最近的約束是結構:
C類< E>其中E:/ * *枚舉/結構
如果您需要確保它是一個枚舉使用typeof運算(E).IsEnum
5
您不能直接在C#中執行此操作 - 枚舉類型不可用作約束。一個選項(蹩腳的)是使用類型初始值設定項(靜態構造函數)在運行時進行檢查。它會在運行時使用不合適的類型停止它,但不會在編譯時。
class Foo<T> where T : struct {
static Foo() {
if (!typeof(T).IsEnum) {
throw new InvalidOperationException("Can only use enums");
}
}
public static void Bar() { }
}
enum MyEnum { A, B, C }
static void Main() {
Foo<MyEnum>.Bar(); // fine
Foo<int>.Bar(); // error
}
+0
這可能是.net有時令人沮喪的侷限 - 特別是因爲Enum不是唯一被排除在外的類型在約束中使用 - 也是:System.Delegate,System.Array和System.ValueType。 – LBushkin 2009-06-12 17:58:30
0
既然你說你不能使用的限制,它來到我的腦海裏唯一的其他解決方案是使用動態轉換,並在運行時檢查結果。從使用約束作爲解決方案來看,這是最差的。但是,here您可以找到可能有所幫助的文章。
相關問題
- 1. C#泛型 - 約束的類型參數
- 2. Scala:將泛型類型參數約束爲另一個參數的類型
- 3. 約束泛型類型參數的數值類型
- 4. 斯卡拉 - 約束泛型類型特定類型
- 5. 指定類型約束上的通用泛型類型
- 6. 類型約束的Swift泛型數組
- 7. 使用泛型約束的參數類型VS顯式類型聲明
- 8. C#運行時將約束泛型類型轉換爲約束類型
- 9. 將函數泛型參數約束到關聯的類型
- 10. 限制類型參數在C#泛型
- 11. 如何定義基本類型的泛型類型限制?
- 12. 如何定義實現接口並約束類型參數的泛型類?
- 13. 如何獲得泛型類之外的實際泛型參數?
- 14. 使用自由綁定泛型類型作爲類型參數
- 15. 類型約束中的泛型
- 16. 接口的泛型類型約束?
- 17. 泛型和類型約束的規則
- 18. 如何使用泛型類型的泛型列表泛型類
- 19. 如何解決C#中泛型類型約束的侷限性?
- 20. 如何在Swift中將類型(符合約束條件)類型化爲泛型?
- 21. 使用泛型類型參數類
- 22. 泛型結構 - 如何約束類型參數C#
- 23. 泛型類型作爲泛型類型參數
- 24. 泛型中的類型別名類型約束
- 25. 將C#類型參數約束爲一系列基元類型?
- 26. 如何將泛型類型限制爲不擴展類?
- 27. 如何爲泛型提供對引用類型的約束?
- 28. 在Swift中,如何在類型參數受協議約束的泛型類中使用關聯類型?
- 29. c#泛型錯誤:方法的類型參數'T'的約束......?
- 30. 反映了泛型類型約束
順便說一句 - 你想做什麼?如果這是針對使用泛型的「flags」按位運算(一個常見問題),還有另一種選擇... – 2009-02-11 10:33:56