我在C#10有以下课程:

public sealed record Country : IEquatable<Country>
{
    public string Language { get; set; } = "xx";

    public bool Equals(Country? other)
    {
        if (other is null)
        {
            return false;
        }

        return Language == other.Language;
    }

    public override int GetHashCode() => Language.GetHashCode();
}

编译时会出现以下编译时错误:

接口成员的bool系统.IEquatable&lt;国家&gt;.平等(国家?)'没有实施

这是...对于所讨论的类型,有一条非常奇怪的错误消息.我try 改变Country参数的可空性,并try 生成"missing"方法,该方法将为我的IDE生成以下方法:

public bool Equals(Country? other) => throw new NotImplementedException();

然后,当然,错误切换到

已声明具有相同签名的成员

直接生成Equals()方法只会覆盖现有方法.

这是怎么回事?并不是所有的同事都对这个类有相同的错误消息,所以它可能与这个类无关.(例如,我想我是Windows上唯一的一个.)dotnet build可以工作,所以这可能只是Rider 2021.3.2的一个问题,但这也是我的同事使用的IDE.

推荐答案

它与您的记录使用有关,记录已经实现了这个接口,不需要IEquatable

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/records#equality-members

Visual studio中的快速测试及其可能的IDE问题.

Csharp相关问答推荐

当MD5被废弃时,如何在Blazor WASM中使用它?

为什么xslWriter不总是按照xslWriterSet中指定的格式格式化该文档?

图形.DrawString奇怪异常的字距调整

如何将Kafka消息时间戳转换为C#中的日期和时间格式?

REST API端点中异步后台代码执行的类型

C#.NET依赖项注入顺序澄清

C#带主体的主构造函数?

如何将DotNet Watch与发布配置和传递给应用程序的参数一起使用?

Lambda表达式如何与隐式强制转换一起工作?

将内置的OrderedEumable&Quot;类设置为内部类有什么好处?

源代码生成器项目使用`dotnet build`编译,而不是在Visual Studio中编译?

岛屿和框架中的自定义控件库.Navigate-AccessViolationException

工厂类是如何在.NET 8中注册的?

为什么Swashbakle/Swagger在参数中包含变量名?

如何在绑定到数据库的datagridview中向上或向下移动行

无法向Unity注册Microsoft Logger

如何对构建在Clean架构和CQRS之上的控制器进行单元测试?

我是否以错误的方式使用了异步延迟初始化?

缩写的MonthNames有问题

C#LINQ多行条件