Estoy usando ReSharper 5.0, y me pregunto cómo su función de análisis de código sabe resaltar el siguiente assemblies == null
con el comentario "La expresión siempre es falsa".¿Cómo sabe ReSharper que este tipo de devolución nunca es nulo?
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");
}
Entiendo si el tipo de devolución es un tipo de valor, que no lo es. También entiendo si hubo algún tipo de contrato de código o metadatos que indica que .GetFiles()
nunca devolverá nulo. pero no creo que exista
Entonces, ¿cómo sabe esto? ¿Me estoy perdiendo algo obvio, o ReSharper tiene algún conocimiento privilegiado, como una lista interna de metadatos sobre los métodos de framework? ¿O es realmente "introspect" el código interno y resolverlo?
Podrían haber examinado la documentación: "Si no hay archivos, este método devuelve una matriz vacía". – stuartd
Oh sí, simplemente llamaron a omniscienceHelper.ReadDocs() – heisenberg