Я только что обновил 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
: Обнуляемость ссылочных типов в типе параметра 'o' из 'bool MyType.Equals (MyType o)' не соответствует неявно реализованному члену 'bool IEquatable.Equals (MyType other)' из-за атрибутов обнуляемости.
Как лучше всего решить эту проблему?
Я могу добавить обнуляемый оператор bool Equals(T? o)
или добавить [AllowNull]
(со ссылкой на System.Diagnostics.CodeAnalysis
). Оба, кажется, предупреждают go, но я не уверен, какое из них лучше.
Кроме того, теперь я открыл дверь для параметра null
, который мне не нужен.