代码示例:
var positions = new List<Position>();
for (int i = 0; i < 20; i++)
{
positions.Add(new Position { Code = "A", Value = i });
positions.Add(new Position { Code = "A", Value = i });
}
var test = positions.GroupBy(p => p, new PositionComparer());
public class Position
{
public string Code;
public int Value;
}
public class PositionComparer : IEqualityComparer<Position>
{
public bool Equals(Position x, Position y)
{
return x.Code == y.Code && x.Value == y.Value;
}
public int GetHashCode(Position pos)
{
unchecked
{
int hash = 17;
hash = hash * 31 + pos.Code.GetHashCode();
hash = hash * 31 + pos.Value;
return hash;
}
}
}
我在
GetHashCode
(和Equals
)中都有一个断点。GroupBy
期间没有命中断点,为什么不呢? 最佳答案
从documentation for GroupBy
:
通过使用延迟执行来实现此方法。立即返回值是一个对象,该对象存储执行操作所需的所有信息。直到通过直接调用对象的GetEnumerator方法或在Visual C#中使用foreach或在Visual Basic中使用For Each枚举对象,才执行此方法表示的查询。
除非您实际上在代码中对test
进行了操作,否则实际上不会执行分组操作,因此您的PositionComparer
也不会得到执行。
关于c# - IEqualityComparer + GroupB的GetHashCode中的断点未命中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44001698/