gpt4 book ai didi

c# - 当我将 null 转换为另一个类时会发生什么

转载 作者:行者123 更新时间:2023-11-30 21:51:19 24 4
gpt4 key购买 nike

我在库方法中有一些代码,如下所示:

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?

按要求截图: Provider can not be null message

更新:从下面的 Jebs answer 获得帮助后,这是结论:调用 GetProvider 时,relativePath 不能为 null,因为应用程序已经崩溃,因为 relativePath.Lenght 在代码中进一步检查。 (见截图)

最佳答案

让我们首先回答您的结论性问题。有两个,合并为一个(请尽量避免),所以我将它们分开并一次回答一个:

Is Resharper wrong...?

是的。 好吧,也许……稍后会详细介绍。

... or will (WebDavProviderBase)null return a new WebDavProviderBase?

没有。


Visual Studio 2015 Professional ... says this is a superfluous check, because provider can never be null.

这可能只是巧合地与您提出的问题有关,但它可能有助于解释我认为这里发生的事情。 VS2015 可能正在执行某种形式的推导,推断当 relativePath 为非空时,返回值也将为非空。这里有两个先决条件:

  • VS2015 能否仅通过查看您编写的代码推断出 relativePath 是非空的?例如,如果您已将其分配给一个常量值,则答案是肯定的"is"。 更新:.ToString() 方法保证返回字符串或引发异常,因此编译器很可能推断出 relativePath 是这里总是非空的。
  • VS2015 能否推断出非空 relativePath 值对应于非空 GetProvider 返回值?这涉及代表编译器的更复杂的功能,但它仍然不在编译范围之外......如果编译器可以遵循您的逻辑并推断出 null 不可能返回,那么它可以安全地告诉您您的 null 检查是错误的。

关于c# - 当我将 null 转换为另一个类时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35771434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com