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

如何在C#中创建存储泛型类型元素的List?优化重复类结构

用C#泛型消除重复类定义,实现可存储任意类型元素的List

嘿,这个场景太常见了——两个类结构几乎一模一样,就差data属性里的List元素类型不同,完全没必要写两份重复代码!咱们用泛型就能轻松解决这个问题,既减少冗余,还能保证类型安全。

第一步:创建泛型基类

把两个类里重复的部分抽出来,做成一个泛型类,把变化的元素类型用类型参数T代替:

public class DataTableResponse<T>
{
    public int draw { get; set; }
    public int recordsTotal { get; set; }
    public int recordsFiltered { get; set; }
    public List<T> data { get; set; }
}

这里的T就是你要动态替换的类型,比如SpecialClass或者YTDTRNSLine,编译器会在编译时帮你确定具体类型,不会出现类型不匹配的问题。

第二步:替代原来的两个类

现在你完全可以抛弃ClassOne和ClassTwo了,直接用泛型类的具体实例:

  • 原来的ClassOne,现在用DataTableResponse<SpecialClass>
  • 原来的ClassTwo,现在用DataTableResponse<YTDTRNSLine>

举个实际使用的例子:

// 对应原来的ClassOne功能
var specialResponse = new DataTableResponse<SpecialClass>
{
    draw = 1,
    recordsTotal = 150,
    recordsFiltered = 80,
    data = new List<SpecialClass> 
    { 
        new SpecialClass(), 
        new SpecialClass() 
        // 这里放你的SpecialClass实例
    }
};

// 对应原来的ClassTwo功能
var ytdResponse = new DataTableResponse<YTDTRNSLine>
{
    draw = 2,
    recordsTotal = 200,
    recordsFiltered = 120,
    data = new List<YTDTRNSLine> 
    { 
        new YTDTRNSLine(), 
        new YTDTRNSLine() 
        // 这里放你的YTDTRNSLine实例
    }
};

可选:如果需要扩展特定类的功能

要是原来的ClassOne或者ClassTwo有一些独有的属性,也可以让它们继承这个泛型类,这样既能复用公共属性,又能保留自己的特性:

// 比如ClassOne有额外属性
public class ClassOne : DataTableResponse<SpecialClass>
{
    // 这里加ClassOne独有的属性
    public string SpecialRemark { get; set; }
}

这样一来,ClassOne不仅有泛基类里的所有属性,还能添加自己的专属成员,灵活性拉满!

泛型的好处就是把可变的部分抽象出来,让同一个模板适配多种类型,既减少了重复代码的维护成本,又能享受到静态类型检查的安全性,完美解决你的问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:06:38