如何在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
相关产品推荐
相关产品推荐

