代码之家  ›  专栏  ›  技术社区  ›  Rob Levine

Resharper如何知道此返回类型从不为空?

  •  16
  • Rob Levine  · 技术社区  · 15 年前

    我使用的是Resharper 5.0,我想知道它的代码分析函数是如何提高以下内容的 assemblies == null 用注释“表达式总是错误的”。

    var directory = new DirectoryInfo("somedir");
    FileInfo[] assemblies = directory.GetFiles("*.dll");
    
    if (assemblies == null <<--- this is highlighted with "Expression is always false"
        || assemblies.Length == 0)
    {
      _log.Warn("No assemblies found");
    }
    

    我可以理解返回类型是否是值类型,而不是值类型。我还可以理解是否有某种代码契约或元数据声明 .GetFiles() 永远不会返回空值。但我认为没有。

    那么-它怎么知道这个?我是否遗漏了一些明显的东西,或者Resharper是否拥有一些特权知识,比如关于框架方法的内部元数据列表?还是真的? 反思 “内部代码和解决方案?

    2 回复  |  直到 15 年前
        1
  •  25
  •   Tim Robinson    15 年前

    resharper开发人员对.NET框架二进制文件运行流分析,并确定哪些方法可能返回,哪些方法可能不返回。 null . 显然 DirectoryInfo.GetFiles 永不回头 无效的 .

    您可以用一组 JetBrains. 属性。查看Resharper站点: http://www.jetbrains.com/resharper/features/code_analysis.html#Annotated_Framework

    编辑: 具体来说,要回答您的问题,“Resharper是否拥有一些特权知识,例如关于框架方法的内部元数据列表”—是的,它来自“内省内部代码并解决它”。

        2
  •  5
  •   Bill the Lizard    15 年前

    正如蒂姆指出的,我们注释了.NET框架。它类似于代码契约,但做得有点不同。如果您在Resharper安装中的bin文件夹下查看,则可以看到所有注释。

    推荐文章