【发布时间】:2016-03-03 11:51:01
【问题描述】:
我在一个库方法中有一些代码,如下所示:
public static WebDavProviderBase GetProvider(string relativePath)
{
if (relativePath == null)
return (WebDavProviderBase) null;
if (relativePath.Length == 0)
return (WebDavProviderBase) new DefaultProvider();
WebDavProviderBase returnProvider = (WebDavProviderBase) null;
if ((int) relativePath[0] == 47)
relativePath = relativePath.Substring(1);
WebDavProviderBase.GetRootProvider().MapPath(relativePath, out returnProvider);
return returnProvider;
}
当我使用代码时,它看起来像这样:
WebDavProviderBase provider = WebDavProviderBase.GetProvider(relativePath);
if (provider == null)
{
//Do something
}
但是,Resharper (10 Ultimate) 抱怨 null 检查,并说这是一个多余的检查,因为 provider 永远不能为 null。
Resharper 是不是错了,还是 (WebDavProviderBase)null 会返回一个新的 WebDavProviderBase?
更新: 从下面的 Jebs 回答中得到帮助后,这是结论: 当 GetProvider 被调用时,relativePath 不能为空,因为应用程序已经崩溃,因为代码中的 relativePath.Lenght 进一步检查。 (见截图)
【问题讨论】:
-
重塑器错误。或者您发布的代码过于简化。请注意,我没有收到 Resharper 警告(我使用的是 R#10.0.2)。所以我怀疑你没有发布正确的复制品。
-
我已经用完整的第三方库代码更新了这个问题,以防它产生任何影响。另请注意,此代码位于第三方 dll 中。
-
刚刚意识到不是 Resharper 给出了错误,而是 Visual Studio 2015 Professional。再次更新问题。
-
如果你改写
WebDavProviderBase.GetProvider(null);会发生什么? -
请发布您收到的完整错误消息。另外,如果可能,请提供一个minimal reproducible example,它只使用我们有权访问的类。