V3169. Suspicious return of a local reference variable which always equals null.
Анализатор обнаружил, что в выражении 'return' возвращается локальная переменная, значением которой всегда будет 'null'. Подобное может происходить как из-за того, что переменной забыли присвоить нужное значение, так и из-за потенциальной логической ошибки.
Рассмотрим пример с логической ошибкой, вследствие которой метод 'GetRootNode' всегда возвращает 'null':
public Node GetRootNode(Node node)
{
Node parentNode = node.Parent == null ? node : node.Parent;
while (parentNode != null)
{
parentNode = parentNode.Parent;
}
return parentNode;
}
Условие в операторе 'while' будет выполняться до тех пор, пока переменная 'parentNode' не станет равной 'null'. Для того, чтобы исправить поведение метода, в условии оператора 'while' следует выполнять сравнение с 'null' не самой переменной 'parentNode', а её свойства 'Parent'. Исправленный вариант метода 'GetRootNode' будет выглядеть следующим образом:
public Node GetRootNode(Node node)
{
Node parentNode = node.Parent == null ? node : node.Parent;
while (parentNode.Parent != null)
{
parentNode = parentNode.Parent;
}
return parentNode;
}