【发布时间】:2020-06-30 04:29:36
【问题描述】:
我刚刚使用最新的 .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);
}
因此,我使用 bool Equals(T o) 实现 IEquatable<T> 的任何类现在都会显示警告:
CS8767: 'bool MyType.Equals(MyType o)' 的参数 'o' 类型中的引用类型的可空性与隐式实现的成员 'bool IEquatable.Equals(MyType other)' 不匹配,因为可空性属性.
解决这个问题的最佳方法是什么?
我可以添加一个可为空的运算符bool Equals(T? o),也可以添加[AllowNull](参考System.Diagnostics.CodeAnalysis)。两者似乎都使警告消失了,但我不确定哪个更好。
另外,我现在打开了一个我并不真正想要的null 参数的大门。
【问题讨论】:
-
我意识到可空性检查和泛型仍然是一项艰难的生活......
-
'错误'? '固定的' ?你有这方面的参考吗?
-
将
[AllowNull]添加到您的Equals方法中 -
你能分享整个代码示例吗?随着你的类型实现
IEquatable<T>
标签: c# c#-8.0 nullable-reference-types