泛型:其中 T 是 A 型或 B 型

本文关键字:型或 其中 泛型 | 更新日期: 2023-09-27 17:57:21

在处理泛型时,我们可以做where T: TypeA, TypeB这意味着T必须同时实现TypeA和TypeB。但是是否可以在此表达式中使用 OR?例如where T: TypeA || TypeB?有没有办法这样做?

泛型:其中 T 是 A 型或 B 型

这是不可能的,也没有真正的意义。您永远不能依赖T拥有某些成员可用,因为它可能是 A B。那么所有成员都是可选的。

当然可以想象有这个功能,但它违背了泛型的精神。这仅在反射情况下有用。

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

public interface IParent
{
}
public class TypeA : IParent
{
    //snip
}
public class TypeB : IParent
{
    //snip
}

然后你可以使用

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