条件或 - 或类型约束

时间:2012-03-31 02:33:42

标签: c#

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

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.

2 个答案:

答案 0 :(得分:4)

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

的常用函数
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) {  
    ...
  }
}

不完全确定您要对TU参数做些什么。也许你可以详细说明一下

答案 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>();
    }
}