首页 > 解决方案 > 使用列表列表替换元组列表

问题描述

我正在使用早期版本的 .NET,我想要一个元组替换。我不想创建自己的元组类,而是使用列表列表。是否会出现任何问题,即列表未设置长度?

代替

List<(String, String, String)> myList;

List<List<string>> myList;

此外,我正在制作这些元组列表或列表列表中的 2 个,并比较差异,其中我发现 1 个列表中存在的所有元素而不是其他元素,反之亦然,因此比较需要直观且不臃肿才能实现。

标签: c#listtuples

解决方案


您正在有效地创建一个锯齿状数组。直接回答您的问题:锯齿状数组本质上没有任何问题,您绝对可以让它发挥作用。但是对于您的用例,这似乎有点代码味道。我会研究一种传达意图的方法。

在你的第一个例子中,

List<(String, String, String)> myList;

有一些意图正在传达。目的是列表中的每个项目都将具有三个字符串成员。这是一个好的开始。当您切换到:

List<List<string>>

任何阅读代码的人都会失去这种意图,这不利于可读性和可维护性。

假设您要向列表的每个项目添加第四个成员。如果您的列表是一个元组,则添加到列表中的每一段代码都必须在您的代码编译之前更新。这很好,因为它可以防止运行时错误。另一方面,如果您的列表是一个锯齿状数组,则在编译时您无法确定列表中的每个项目都包含正确数量的字符串。通过将元组列表变成锯齿状数组,您的代码更难扩展。

我个人会选择类似于元组方法的方法,但我会编写一个按名称定义成员的类。这又回到了交流意图。例如:

record Person {}
{
    string FirstName {get; set;}
    string MiddleName {get; set;}
    string LastName {get; set;}
}

List<Person> myList;

在这种情况下,您不会发现自己在问“元组的 item1 又是什么?”。相反,您将能够轻松地解释列表中的每个项目。


推荐阅读