我刚刚使用最新的.NET Core 3.1.2将Visual Studio更新到了最新的16.6.0 Preview 1.0。我的项目有<Nullable>enable</Nullable>
。
似乎IEquatable<T>
进行了更改,现在已使用[AllowNull]
进行了定义:
public interface IEquatable<T>
{
bool Equals([AllowNull] T other);
}
结果,任何使用
IEquatable<T>
实现bool Equals(T o)
的我的类现在都显示警告:解决此问题的最佳方法是什么?
我可以添加可为空的运算符
bool Equals(T? o)
,也可以添加[AllowNull]
(引用System.Diagnostics.CodeAnalysis
)。两者似乎都使警告消失了,但是我不确定哪一个更好。另外,我现在打开了我真正不需要的
null
参数的门。 最佳答案
IEquatable<T>.Equals
的约定是该参数可以为null。如果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/