Хм, по-видимому, статический анализ Resharper умнее меня ... Код, в котором я правильно получаю "выражение всегда верно" - предупреждение:
int[] someArray = new int[10];
while (someArray != null)
{
Foo(ref someArray);
someArray.Bar();
}
Я получаю предупреждениечто someArray != null
является избыточным, поэтому я подумал, что Resharper неверно истолковал параметр ref, так как someArray
фактически может быть назначен на ноль.Но это не причина, почему предупреждение верно.Тогда играет роль тонкий факт: то, что someArray
равно нулю, будет означать, что при вызове Bar
будет выброшено NullReferenceException
, и при этом изменяется поток управления так, что начало цикла while не достигается.,Таким образом, даже если someArray
присвоено значение NULL в Foo, предупреждение верно.
Моя ошибка, и спасибо всем за ваши усилия.