ReSharper 警告:基类 [NotNull] 与派生类属性 [CanBeNull] 冲突



请考虑以下 C#.Net 代码:

using System.Xml;
internal class MyXmlReaderClass : XmlReader
{
private readonly XmlReader _innerReader;
public MyXmlReaderClass(...other_parameters... , XmlReader innerReader)
{
_innerReader = innerReader;
}
//... lots of code has been left out, here ...
public override string LocalName
{
get { return _innerReader.LocalName; }
}
//... lots more code has been left out, here ... 
}

在属性中,LocalName,ReSharper 在类型下放置一个下划线,string,并警告"字符串"是(显式或隐式)[NotNull]。

我以为我理解了关于可为空对象的概念。 我已经能够从我的代码中重构大多数这些问题,除了这种情况。

如果我正确理解我的世界,基类(XmlReader)就是ReSharper标识为[NotNull]的。 这意味着 ReSharper 认为我对属性的覆盖可能会返回 null,而 base 永远不会返回 null。

我很难考虑如何使用某种重写来覆盖基类属性LocalName,以便基类和派生类之间的属性没有冲突。

我的问题是多部分的,"ReSharper 究竟在识别什么,我该如何解决不一致?

是的,我已经通过StackOverflow搜索了高低,并使用了Google,但找不到这个具体的例子。

谢谢。

这不是 ReSharper 警告,而是隐式可空性扩展的"类型突出显示"。

ReSharper究竟在识别什么?

突出显示会通知您成员的返回类型隐式为 [NotNull],因为基本成员是 [NotNull]。

基本成员XmlReader.LocalName是 [NotNull],因为 ReSharper 提供了外部注释。

如何修复不一致?

您不必修复它,因为它没有警告/建议。这只是一个亮点。

如果不喜欢此突出显示,可以在"隐式可为空性"页上的"R#"选项中禁用它。

最新更新