在处理泛型时,我们可以where T: TypeA, TypeB
,这意味着T必须同时实现TypeA和TypeB。但是可以在这个表达式中使用OR吗?例如where T: TypeA || TypeB
?无论如何要做到这一点?
答案 0 :(得分:8)
这是不可能的,它不会有意义。您永远不能依赖T
某些成员可用,因为它可能是A 或 B.所有成员都是可选的。
当然可以设想这个功能,但它违背了泛型的精神。这只适用于反射情况。
答案 1 :(得分:7)
实现此目的的唯一方法是使TypeA
和TypeB
继承或实现相同的父类或接口。例如:
public interface IParent
{
}
public class TypeA : IParent
{
//snip
}
public class TypeB : IParent
{
//snip
}
然后你可以使用
public class Blah<T> where T: IParent
{
}