是否可以使用两种类型的“或”而不是“和”的类型约束。通过在两种类型之间加一个逗号来完成“和”。但是“或”呢?
class Type1<T, U>
{
public static Type1<T, U> New<V>( V v )
where V : T, U
{
return new Type1<T, U>();
}
}
所以在上面的例子中,传递给New()的参数必须是T和U.但我希望它是T 或是U.
答案 0 :(得分:4)
无法以您描述的方式表达“或”约束。但是,您可以通过两个重载来模拟这个,其中一个重载接受U
而另一个T
。然后,这两个可以输入处理T
或U
class Type1<T, U> {
public static Type1<T, U> New(U p) {
return NewCore(p);
}
public static Type1<T, U> New(T p) {
return NewCore(p);
}
private static Type1<T, U> New(object o) {
...
}
}
不完全确定您要对T
或U
参数做些什么。也许你可以详细说明一下
答案 1 :(得分:3)
你可以创建一个空的标记界面,让T和U“实现”它们。然后将new约束到实现该接口的任何类型。
public interface ITOrU { /*empty interface*/ }
public interface IT : ITOrU
{
}
public interface IU : ITOrU
{
}
class Type1<T, U>
where T : IT
where U : IU
{
public static Type1<T, U> New( ITOrU v )
{
return new Type1<T, U>();
}
}