实现IEquatable<T>的Record类Equals方法重复定义错误原因咨询
问题原因解析
这个错误的核心原因是C# record类型会自动为你生成符合IEquatableEquals(FilePath other)方法时,就会和编译器自动生成的方法产生重复定义冲突。
具体细节:
- 当你声明一个record类时,无论是否显式标注实现
IEquatable<FilePath>,编译器都会默认让该record实现IEquatable<自身类型>,并自动生成以下相关成员:- 强类型的
Equals(T other)方法 - 重写的
Equals(object? obj)方法 - 重写的
GetHashCode()方法
- 强类型的
- 如果你手动编写了一个签名完全一致的
Equals(FilePath other)方法,就会和编译器自动生成的方法撞车,触发“已定义相同参数类型的Equals成员”的错误。
举个典型的冲突代码示例:
public record FilePath : IEquatable<FilePath> { // 编译器已自动生成该方法,手动编写会直接冲突 public bool Equals(FilePath? other) { // 你的自定义相等逻辑 } }
对应的解决思路:
- 若要自定义相等逻辑,不需要手动新增
Equals(FilePath other),而是直接用override关键字覆盖编译器自动生成的该方法即可:
public record FilePath { public string FullPath { get; init; } public override bool Equals(FilePath? other) { if (other is null) return false; // 自定义相等判断逻辑 return this.FullPath.Equals(other.FullPath, StringComparison.OrdinalIgnoreCase); } }
内容的提问来源于stack exchange,提问作者J Scott
相关产品推荐
相关产品推荐

