首页 > 解决方案 > c# linq List 属性和分组依据

问题描述

鉴于此示例代码:

var item1 = ("Test1", new List<string>() { "1", "2", "3" });
var item2 = ("Test2", new List<string>() { "1", "2", "3" });
var item3 = ("Test3", new List<string>() { "1", "2", "3" });

var _list = new List<(string ID, List<string> Items)>
{
    item1,
    item2,
    item3
};

var groupby = _list.GroupBy(x => x.Items);

当您GroupBy在这里调用时,为什么结果不是单个组,因为“项目”列表都相同?

标签: c#linqgroup-by

解决方案


因为列表包含相同顺序的相同元素并不意味着它们是相同的。两个列表相同的默认定义是它们是否具有相同的引用,这意味着它们是否指向内存中的相同对象。

您有三个不同的引用指向三个不同的对象。

如果您想覆盖此行为并重新定义“相同”的含义,您可以实现一个IEqualityComparerforList<string>来检查两个列表是否包含相同顺序的相同元素。并将该比较器提供给GroupBy.


推荐阅读