# 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;
    }