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

C#如何根据枚举值运行时生成子类List并以基类List<A>类型返回

解决方案

你提到的B1和B2的info属性类型差异,并不影响List<A>类型的返回逻辑:因为基类A本身不包含info属性定义,返回的集合仅要求元素为A的派生类实例即可,类型差异只会在你需要访问具体子类的info属性时才需要处理。

基础实现方案

1. 方法核心实现

C#中List<T>不支持协变直接赋值,你可以通过Cast<T>()方法将子类集合转换为List<A>返回,示例代码如下:
首先补充枚举定义参考:

public enum typeEnum
{
    B1Type,
    B2Type
}

方法实现代码:

public List<A> function(typeEnum t)
{
    switch (t)
    {
        case typeEnum.B1Type:
            // 按业务需求构造B1类型集合
            List<B1> b1List = new List<B1>
            {
                new B1 { ID = 1, tag = "B1实例1", info = 100 },
                new B1 { ID = 2, tag = "B1实例2", info = 200 }
            };
            return b1List.Cast<A>().ToList();
        case typeEnum.B2Type:
            // 按业务需求构造B2类型集合
            List<B2> b2List = new List<B2>
            {
                new B2 { ID = 3, tag = "B2实例1", info = new C() },
                new B2 { ID = 4, tag = "B2实例2", info = new C() }
            };
            return b2List.Cast<A>().ToList();
        default:
            throw new ArgumentOutOfRangeException(nameof(t), "不支持的枚举参数");
    }
}

2. 访问子类info属性的处理方案

拿到返回的List<A>后如果需要使用info属性,通过类型匹配判断即可:

List<A> result = function(typeEnum.B1Type);
foreach (A item in result)
{
    if (item is B1 b1Item)
    {
        // 访问int类型的info
        Console.WriteLine($"B1的info值:{b1Item.info}");
    }
    else if (item is B2 b2Item)
    {
        // 访问C类型的info
        Console.WriteLine($"B2的info值:{b2Item.info}");
    }
}

优化方案:基类统一暴露info入口

如果你希望在基类层面可以直接访问info属性,不需要每次做类型判断,可以将A改为抽象类,添加抽象的Info属性:

public abstract class A
{
    public int ID { get; set; }
    public string tag { get; set; }
    // 基类统一暴露Info,返回object类型适配不同子类的属性类型
    public abstract object Info { get; }
}

public class B1 : A
{
    public int info { get; set; }
    public override object Info => info;
}

public class B2 : A
{
    public C info { get; set; }
    public override object Info => info;
}

修改后你可以直接通过A类型的实例访问Info属性,如需强类型操作再自行转换即可。

内容的提问来源于stack exchange,提问作者hcurtillet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 21:36:04