考虑以下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
下放置一个下划线,警告,'string'是(显式或隐式)[NotNull]
我认为我理解了关于可以为空的对象的游戏概念。我已经能够从我的代码中重构大部分这些问题,除非在这种情况下。
如果我正确理解了我的世界,那么基类(XmlReader)就是ReSharper标识为[NotNull]
的东西。这意味着ReSharper认为我对属性的覆盖可能会返回null,而base永远不会返回null。
我很难理解如何使用某种覆盖覆盖基类属性LocalName
,这样基类和派生类之间的属性就不会发生冲突。
我的问题是多部分,“ReSharper究竟识别出什么,以及如何解决不一致问题?”
是的,我通过StackOverflow搜索了高低,并使用了Google但却找不到这个具体的例子。
谢谢。
答案 0 :(得分:3)
这不是ReSharper警告,而是"type highlighting" of the Implicit Nullability extension。
ReSharper到底确定了什么?
突出显示通知您的成员的返回类型是隐式[NotNull],因为基本成员是[NotNull]。
由于ReSharper提供了External Annotation,基本成员XmlReader.LocalName
为[NotNull]。
如何解决不一致问题?
您无需修复它,因为它不是警告/建议。这只是一个亮点。
如果您不喜欢此突出显示,可以在隐式可为空性页面的R#选项中禁用它。