代码示例:
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
期间没有点击断点,为什么不点?
答案 0 :(得分:0)
此方法通过使用延迟执行来实现。立即返回值是一个对象,它存储执行操作所需的所有信息。在通过直接调用其GetEnumerator方法或在Visual C#中使用foreach或在Visual Basic中使用For Each来枚举对象之前,不会执行此方法表示的查询。
除非您在代码中实际使用test
执行某项操作,否则分组实际上不会被执行,因此您的PositionComparer
也不会被执行。