在Resharper中可能不正确的"可能的'System.NullReferenceException'"提示

Cus*_*dio 2 c# resharper resources

我想迭代一个列表并获取标签文本值.通过Resharper提示,显然一切都很好.代码:

string someString = GetLocalResourceObject(GetNameAsResource(resourceKey)) != null ?
                GetLocalResourceObject(GetNameAsResource(resourceKey)).ToString() :
                parametro.Parametro.Nome;
Run Code Online (Sandbox Code Playgroud)

并且在GetLocalResourceObject(GetNameAsResource(resourceKey)).ToString()Resharper建议:可能是'System.NullReferenceException'我做错了什么或Resharper只是不认识以前的空验证?

TKS

Aak*_*shM 6

由于GetLocalResourceObject()是一个方法,ReSharper不知道第二次调用的返回值将与第一次调用的返回值相同!做这个:

var resourceObject = GetLocalResourceObject(GetNameAsResource(resourceKey));
string someString = 
    resourceObject != null 
    ? resourceObject.ToString() 
    : parametro.Parametro.Nome;
Run Code Online (Sandbox Code Playgroud)

并且警告将消失,因为现在ReSharper知道resourceObject在调用方法之前已经检查过null.

查看Null对象模式可能会更好- 也就是说,在GetLocalResourceObject当前返回的情况下null,让它返回一个表示"无资源"的实际对象.那么你根本不需要这种无效检查.

  • GetLocalResourceObjectOrDefault方法似乎在.NET中更自然. (3认同)