[英]How to specify types not allowed in a .NET Generics constraint?
是否可以在不允許某些類型的通用 class 上指定約束? 我不知道這是否可能,如果可能,我不確定語法是什么。 就像是:
public class Blah<T> where : !string {
}
我似乎找不到任何允許這種約束的符號。
您可以獲得的最接近的是運行時約束。
編輯:最初我將運行時檢查放在構造函數調用中。 這實際上並不是最優的,因為它會在每次實例化時產生開銷; 我相信將檢查放在static構造函數中會更明智,該構造函數將被用作Blah<T>
類型的T
參數的每種類型調用一次:
public class Blah<T> {
static Blah() {
// This code will only run ONCE per T, rather than every time
// you call new Blah<T>() even for valid non-string type Ts
if (typeof(T) == typeof(string)) {
throw new NotSupportedException("The 'string' type argument is not supported.");
}
}
}
顯然不理想,但如果你把這個約束放在適當的位置並記錄string
不是受支持的類型參數的事實(例如,通過 XML 注釋),你應該得到接近編譯時約束的有效性的地方。
不,您不能直接指定“否定”類型約束。
約束只能是正約束,如文檔中所述。
您唯一能做的就是指定哪些類型可以放入泛型類型中,但您不能指定哪些類型不能放入其中。
這是允許的約束(更多細節)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.