我刚刚用最新的.NET Core3.1.2将Visual更新为最新的16.6.0Preview1.0。我的项目有<Nullable>enable</Nullable>。
似乎IEquatable<T>已经发生了变化,现在它是用[AllowNull]定义的
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参数的门,我并不真正想要这个参数。
发布于 2020-04-25 12:31:31
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://stackoverflow.com/questions/60750386
复制相似问题