You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:22:46