Как ReSharper знает, что этот тип возврата никогда не является пустым?

Я использую 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 имеет некоторое привилегированное знание, такое как внутренний список метаданных о методах платформы? Или это на самом деле "анализирует" внутренний код и разрабатывает его?

16
задан Matthew Flaschen 13 July 2010 в 13:53
поделиться

2 ответа

Разработчики ReSharper провели анализ потока в двоичных файлах .NET framework и определили, какие методы могут возвращать null, а какие нет. Очевидно, DirectoryInfo.GetFiles никогда не возвращает null.

Вы можете аннотировать свой собственный код для указания того же набора правил, используя набор JetBrains. атрибутов. Загляните на сайт ReSharper: http://www.jetbrains.com/resharper/features/code_analysis.html#Annotated_Framework

Edit: чтобы конкретно ответить на ваш вопрос, "обладает ли ReSharper некоторыми привилегированными знаниями, такими как внутренний список метаданных о методах фреймворка" - да, это произошло от "интроспекции внутреннего кода и его отработки"

25
ответ дан 30 November 2019 в 17:51
поделиться

Как указывает Тим, мы аннотируем .NET Framework. Это похоже на то, что вы получаете с Code Contracts, но сделано немного иначе. Если вы посмотрите под папку bin в установке ReSharper, вы увидите все аннотации.

5
ответ дан 30 November 2019 в 17:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: