C#在泛型方法中强制转换继承的类



我有一个名为GetOnlyMatchingType()的通用方法,它应该返回一个类数组中所有特定继承类的数组。

假设你有源自水果的苹果和橙子。现在假设你有一个水果阵列,并且只想得到该阵列中的橙子。这就是我的方法应该做的,所以你应该能够做到:

Fruit.Orange[] oranges = GetOnlyMatchingType<Fruit, Fruit.Orange>(fruits);

现在是方法:

public static To[] GetOnlyMatchingType<From, To>(From[] from)
{
int i = 0;
foreach (From obj in from)
{
if (obj is To)
{
i++;
}
}
To[] output = new To[i];
i = 0;
foreach (From obj in from)
{
if (obj is To)
{
output[i] = (To)obj;
i++;
}
}
return output;
}

问题出现在第18行output[i] = (T)obj;CS0030: Cannot convert type 'From' to 'To'

我尝试用From.To替换每个To,但这只会导致编译错误。有什么办法可以让我的方法奏效吗?

您只需使用Enumerable.OfType<T>()即可:

Fruit.Orange[] oranges = fruits.OfType<Fruit.Orange>().ToArray();

但是,如果您真的想使用自己的本土版本,您需要告诉编译器ToFrom继承,以便该强制转换有效:

public static To[] GetOnlyMatchingType<From, To>(From[] from) where To : From

最新更新