给出以下示例代码:
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
时,由于“项”的列表都相同,为什么结果不是单个组?
答案 0 :(得分:1)
因为列表包含相同顺序的相同元素并不意味着它们相同。对于两个列表,默认的相同定义是它们是否具有相同的引用,即它们是否指向内存中的同一对象。
您有三个不同的引用指向三个不同的对象。
如果您想覆盖此行为并重新定义“相同”的含义,则可以为List<string>
实现IEqualityComparer
,以检查两个列表是否包含相同顺序的相同元素。并将比较器提供给GroupBy
。