泛型:其中T是TypeA或TypeB

时间:2015-06-21 22:19:13

标签: c# generics

在处理泛型时,我们可以where T: TypeA, TypeB,这意味着T必须同时实现TypeA和TypeB。但是可以在这个表达式中使用OR吗?例如where T: TypeA || TypeB?无论如何要做到这一点?

2 个答案:

答案 0 :(得分:8)

这是不可能的,它不会有意义。您永远不能依赖T某些成员可用,因为它可能是A B.所有成员都是可选的。

当然可以设想这个功能,但它违背了泛型的精神。这只适用于反射情况。

答案 1 :(得分:7)

实现此目的的唯一方法是使TypeATypeB继承或实现相同的父类或接口。例如:

public interface IParent
{
}

public class TypeA : IParent
{
    //snip
}

public class TypeB : IParent
{
    //snip
}

然后你可以使用

public class Blah<T> where T: IParent
{
}