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