c# - 使用列表列表替换元组列表
问题描述
我正在使用早期版本的 .NET,我想要一个元组替换。我不想创建自己的元组类,而是使用列表列表。是否会出现任何问题,即列表未设置长度?
代替
List<(String, String, String)> myList;
和
List<List<string>> myList;
此外,我正在制作这些元组列表或列表列表中的 2 个,并比较差异,其中我发现 1 个列表中存在的所有元素而不是其他元素,反之亦然,因此比较需要直观且不臃肿才能实现。
解决方案
您正在有效地创建一个锯齿状数组。直接回答您的问题:锯齿状数组本质上没有任何问题,您绝对可以让它发挥作用。但是对于您的用例,这似乎有点代码味道。我会研究一种传达意图的方法。
在你的第一个例子中,
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 又是什么?”。相反,您将能够轻松地解释列表中的每个项目。
推荐阅读
- python - Pytorch Torch.save FileNotFoundError
- redis - Redis - 如何从 redis 获取最近 1 小时的数据
- php - 如何解析 websocket 数据帧
- vba - 从 Excel VBA 调用 Oracle PL SQL 函数
- react-native - react-native 全局提示用户在网络失败时启用 wifi 或蜂窝
- android - 如何修改android上的触摸屏驱动程序以获得自动快速屏幕触摸?
- android - 活动生命周期-在实际项目中使用
- apache-spark - 加入后处理 Spark 中的不良记录
- vba - 如何将数据透视表列中的所有值除以常数
- python - 在 django 中搜索不起作用