【发布时间】:2021-05-09 21:29:42
【问题描述】:
我今天正在试验 C# 9.0 的特性,并注意到当 record 具有 List<Point2d> 时,列表中具有相同项目的两条记录不再相等。 Point2d 也是 record 这里。
public sealed record Point2d
{
public Point2d(double x, double y)
{
X = x;
Y = y;
}
public double X { get; }
public double Y { get; }
}
public sealed record Polyline2d
{
private readonly List<Point2d> _corners;
public Polyline2d(IEnumerable<Point2d> corners)
{
_corners = new List<Point2d>(corners);
}
}
Polyline2d a = new (new Point2d[] { new(0, 0), new(1, 1), new(2, 2)});
Polyline2d b = new (new Point2d[] { new(0, 0), new(1, 1), new(2, 2) });
a == b => false
如果我手动为record 添加相等方法并重新定义Equals() 方法,那么一切都会再次正常:
public bool Equals(Polyline2d other)
{
return other != null && _corners.SequenceEqual(other._corners);
}
public override int GetHashCode()
{
return 42;
}
a == b => true
这是解决此问题的正确方法,还是我需要考虑的记录数据类型的其他注意事项?
【问题讨论】:
-
感谢 Jeremey 编辑问题。
标签: c# record equality c#-9.0 c#-record-type