根据以下示例,我有一个记录:
public record MyData
{
public string Id { get; set; }
public string Code { get; set; }
public string Description { get; set; }
public bool operator ==(MyData d1, MyData d2)
{
return d1.Id == d2.Id;
}
public bool operator !=(MyData d1, MyData d2)
{
return d1.Id != d2.Id;
}
}
这是我收到的错误消息,我不知道如何解决!
错误 CS0111:“MyData”类型已经定义了一个名为“op_Equality”的成员,具有相同的参数类型。
当我转换record
到class
这个问题解决了,但由于一些原因,我们必须用不断record
。摆脱这个编译问题的解决方案是什么?
它是根据规格设计的:
对于记录,编译器生成 Equals 方法。在实践中,记录中值相等的实现速度明显更快
在类类型中,您可以手动覆盖相等方法和运算符以实现值相等,但开发和测试该代码将非常耗时且容易出错。内置此功能可防止在添加或更改属性或字段时因忘记更新自定义覆盖代码而导致的错误。
这意味着record
如果您打算覆盖相等运算符,则不应选择类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句