我有一个名为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();
但是,如果您真的想使用自己的本土版本,您需要告诉编译器To
从From
继承,以便该强制转换有效:
public static To[] GetOnlyMatchingType<From, To>(From[] from) where To : From