首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEquatable<T>和[AllowNull]

IEquatable<T>和[AllowNull]
EN

Stack Overflow用户
提问于 2020-03-19 03:09:14
回答 1查看 2.1K关注 0票数 10

我刚刚用最新的.NET Core3.1.2将Visual更新为最新的16.6.0Preview1.0。我的项目有<Nullable>enable</Nullable>

似乎IEquatable<T>已经发生了变化,现在它是用[AllowNull]定义的

代码语言:javascript
复制
public interface IEquatable<T>
{
  bool Equals([AllowNull] T other);
}

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

CS8767:“bool MyType.Equals(MyType O)”中参数'o‘类型中的引用类型的空性不匹配隐式实现的成员'bool IEquatable.Equals(MyType other)’,因为它是空属性。

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

我可以添加一个可空操作符bool Equals(T? o),也可以添加[AllowNull] (引用System.Diagnostics.CodeAnalysis)。两者似乎都让警告消失了,但我不确定哪一个更好。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-25 12:31:31

IEquatable<T>.Equals的惯例是参数可以为null。如果T是一个引用类型,只需用?注释它,警告就会消失。以下内容编译得很好:

代码语言:javascript
复制
#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=

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60750386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档