低版本.NET中使用List<List<string>>替代元组列表的相关问题咨询
替换为List<List>的风险
- 这个方案存在明确的不可控风险,核心问题就出在
List<string>没有固定长度约束:- 原有三元组结构固定包含3个字符串元素,编译期就能保证结构合法性,但
List<string>支持任意增删元素,后续如果有误操作给子列表新增/删除元素,只有运行时触发索引越界才会发现问题,排查成本很高。 - 语义可读性极差:原三元组的三个位置对应固定的业务含义,用List存储的话,后续维护者很容易搞混索引0、1、2分别对应什么字段,容易出逻辑错误。
- 原有三元组结构固定包含3个字符串元素,编译期就能保证结构合法性,但
- 你完全可以用.NET Framework 4.0及以上就原生支持的
Tuple类替代,直接把声明改为List<Tuple<string, string, string>> myList;即可,既满足固定3个元素的约束,编译期就能检查结构合法性,没有长度变动的风险。
差集需求的适配性
- 如果坚持用
List<List<string>>的方案,无法直接满足你要的直观差集实现需求。因为List<T>的默认相等性比较是引用比较,两个内容完全相同的独立List<string>实例会被判定为不相等,你需要额外实现自定义的IEqualityComparer<List<string>>来做逐元素对比,代码会非常臃肿。 - 如果改用
Tuple方案,差集实现非常简单:Tuple类型默认已经实现了按值比较的逻辑,直接调用LINQ的Except方法即可,示例代码如下:
逻辑完全直观,没有多余代码。// 获取list1独有、list2不存在的元素 var list1Only = list1.Except(list2).ToList(); // 获取list2独有、list1不存在的元素 var list2Only = list2.Except(list1).ToList();
内容的提问来源于stack exchange,提问作者Lightsout
相关产品推荐
相关产品推荐

