当我尝试执行以下操作时,
collection.GroupBy(item => new
{
item.Item1,
item.Item2,
item.Item3,
item.Item4
}, StringComparer.CurrentCultureIgnoreCase)
我收到无法从用法中推断参数类型的错误,并尝试明确指定类型参数。
正确的语法是什么?
最佳答案
顾名思义,StringComparer
用于比较简单的字符串,而不是匿名类型。
来自 StringComparer
上的 MSDN 页面:
Represents a string comparison operation that uses specific case and culture-based or ordinal comparison rules.
要比较你的类,你可以创建自己的比较器:
public class CustomComparer : IEqualityComparer<SomeClass>
{
public bool Equals(SomeClass x, SomeClass y)
{
return String.Equals(x.Item1, y.Item1, StringComparison.CurrentCultureIgnoreCase)
&& String.Equals(x.Item2, y.Item2, StringComparison.CurrentCultureIgnoreCase)
&& String.Equals(x.Item3, y.Item3, StringComparison.CurrentCultureIgnoreCase);
}
public int GetHashCode(SomeClass obj)
{
return string.Concat(obj.Item1.ToLower(),
obj.Item2.ToLower(),
obj.Item3.ToLower()).GetHashCode();
}
}
并在 GroupBy
中使用它:
var collection = new List<SomeClass>();
// populate collection
collection.GroupBy(item => item, new CustomComparer());
这应该可行,尽管您可能需要尝试一下。
关于c# - 按多个键分组并忽略大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174705/