有条件的或者是类型约束

是否可以使用两种类型的“或”而不是“和”的类型约束。 通过在两种类型之间加一个逗号来完成“和”。 但是“或”呢?

class Type1 { public static Type1 New( V v ) where V : T, U { return new Type1(); } } 

所以在上面的例子中,传递给New()的参数必须是T和U.但我希望它是T U.

无法以您描述的方式表达“或”约束。 但是,你可以通过两个重载来接受U和另一个T来模拟这个。 然后这两个可以输入处理TU的公共函数

 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) { ... } } 

不太确定你想要用TU参数做什么。 也许你可以详细说明一下

您可以创建一个空的标记界面,让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(); } }