Как обработать исключение foreach null при использовании GetEnumerator из другого класса? - PullRequest
0 голосов
/ 15 января 2019

У меня есть два класса A и B , которые реализуют IEnumerable.

A используйте GetEnumerator из B .
B является членом класса A .

Но член B может быть нулевым, поэтому я добавляю проверку на ноль.

Вопрос также изложен в комментариях к примеру кода. Что следует поместить в другую ветку, чтобы прекратить foreach нулевое исключение?

В следующем примере:
rootNode is B .
Показанная функция является функцией A .
B является членом A .

        public IEnumerator<BVHNode<BoundingVolumeClass>> GetEnumerator()
        {
            if (rootNode != null)
            {
                return rootNode.GetEnumerator();
            }
            else
            {
                return null;
                //return null cause foreach null exception
                //what can be put here to stop it?
            }
        }

1 Ответ

0 голосов
/ 15 января 2019

Не возвращать null, но использовать пустую коллекцию :

    public IEnumerator<BVHNode<BoundingVolumeClass>> GetEnumerator()
    {
        return rootNode == null
          ? Enumerable.Empty<BVHNode<BoundingVolumeClass>>().GetEnumerator()
          : rootNode.GetEnumerator();
    }
...