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