gpt4 book ai didi

c# - IEquatable 和 [AllowNull]

转载 作者:行者123 更新时间:2023-12-02 05:57:01 25 4
gpt4 key购买 nike

我刚刚将 Visual Studio 更新到最新的 16.6.0 Preview 1.0 和最新的 .NET Core 3.1.2。我的项目有<Nullable>enable</Nullable> .

IEquatable<T> 似乎发生了变化。现在它被定义为 [AllowNull] :

public interface IEquatable<T>
{
bool Equals([AllowNull] T other);
}

因此,我的任何类实现了 IEquatable<T>bool Equals(T o)现在显示警告:

CS8767: Nullability of reference types in type of parameter 'o' of 'bool MyType.Equals(MyType o)' doesn't match implicitly implemented member 'bool IEquatable.Equals(MyType other)' because of nullability attributes.

解决这个问题的最佳方法是什么?

我可以添加一个可为 null 的运算符 bool Equals(T? o) ,或者我可以添加 [AllowNull] (引用System.Diagnostics.CodeAnalysis)。两者似乎都使警告消失,但我不确定哪一个更好。

此外,我现在打开了门 null我并不真正想要的参数。

最佳答案

IEquatable<T>.Equals 的约定是参数可以为空。如果T是引用类型,只需用?注释即可并且警告将会消失。以下编译效果很好:

#nullable enable

using System;

public class C1 : IEquatable<C1>
{
public bool Equals(C1? c) => false;
}

public struct C2 : IEquatable<C2>
{
public bool Equals(C2 c) => false;
}

https://sharplab.io/#v2:EYLgtghgzgLgpgJwD4GIB2BXANliwtwAEcaeBAsAFBUACATAIxW0DMh9hAwg4SIQJIBRAI4YIMMnAA83AHxUA3lUIr2bYAHsNWQiLFYoACm4B+QgGMAlIQC8swgDMIBuAG4qAX2aUabWAgxzGC46XgE9cUkZOnlKJUpVNUJNbV1RZyNOUKtbeycXd0ovSiA=

关于c# - IEquatable<T> 和 [AllowNull],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60750386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com