C#泛型方法转换继承类遇CS0030错误,求解决方案
解决泛型方法中的CS0030类型转换错误
你的代码出现CS0030: Cannot convert type 'From' to 'To'错误,核心原因是编译器无法推断泛型参数From和To之间的继承/转换关系,因此不允许直接强制转换。
修改方案1:添加泛型类型约束
给泛型方法添加where To : From约束,明确To是From的派生类型,让编译器认可类型转换的合法性:
public static To[] GetOnlyMatchingType<From, To>(From[] from) where To : 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; }
修改方案2:用LINQ简化实现
如果项目引用了System.Linq,可以直接用OfType<T>方法简化代码,无需手动遍历计数:
using System.Linq; public static To[] GetOnlyMatchingType<From, To>(From[] from) where To : From { return from.OfType<To>().ToArray(); }
OfType<To>()会自动筛选数组中属于To类型的元素,ToArray()直接返回目标类型的数组,代码更简洁高效。
内容的提问来源于stack exchange,提问作者Ascyt
相关产品推荐
相关产品推荐

