c#中类似类型的分组列表

.GroupBy(x => x) 

.GroupBy用于对类似类型的字符串,int等进行分组。 那么我可以使用什么函数对类似的List 进行分组。

GroupBy依赖于以适当的方式实现Equals / GetHashCode的元素类型。

你的问题不明确,但我的猜测是你想要两个具有相同元素的列表被认为是相同的。 我怀疑你需要编写自己的IEqualityComparer实现,并将其传递给GroupBy 。 例如(未经测试):

 public class ListEqualityComparer : IEqualityComparer> { private static readonly EqualityComparer ElementComparer = EqualityComparer.Default; public int GetHashCode(List input) { if (input == null) { return 0; } // Could use Aggregate for this... int hash = 17; foreach (T item in input) { hash = hash *31 + ElementComparer.GetHashCode(item); } return hash; } public bool Equals(List first, List second) { if (first == second) { return true; } if (first == null || second == null) { return false; } return first.SequenceEqual(second, ElementComparer); } } 

您还可以允许每个ListEqualityComparer实例具有单独的每元素比较器,这将允许您以不区分大小写的方式比较(比方说)字符串列表。

我假设你问的是如何按自定义类型的对象进行分组。

您需要定义对象应如何相互比较。
您可以通过在GroupBy调用中指定IEqualityComparer来完成此操作。

如果未指定IEqualityComparer ,则使用IEqualityComparer.Default ,它检查类型T是否实现System.IEquatable接口,如果是,则返回使用该实现的EqualityComparer 。 否则,它返回一个EqualityComparer ,它使用由T提供的Object.Equals和Object.GetHashCode的覆盖。