是否可以对泛型类指定一个约束,以禁止某些类型?我不知道是否可能,如果可能的话,我也不确定语法应该是什么样子的。例如:
public class Blah<T> where : !string {
}
我似乎找不到任何符号来表示这样的约束。
是否可以对泛型类指定一个约束,以禁止某些类型?我不知道是否可能,如果可能的话,我也不确定语法应该是什么样子的。例如:
public class Blah<T> where : !string {
}
我似乎找不到任何符号来表示这样的约束。
你能得到的最接近的是运行时约束。
编辑:最初我将运行时检查放在构造函数调用中。实际上,这并不是最佳选择,因为它会在每次实例化时产生开销;我认为将检查放在静态构造函数中会更加明智,因为它将针对作为T
参数用于你的Blah<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注释),你应该能够接近编译时约束的效果。
以下是允许的约束条件(更多细节)