Как обработать исключение NullReferenceException в foreach? - PullRequest
6 голосов
/ 20 декабря 2010
foreach (string s in myField.getChilds()) {
    if (s == null)
        //handle null
    else
        //handle normal value 
}

Когда я запускаю свою программу, я получаю исключение NullReferenceException, потому что getChilds может возвращать ноль. Как я могу заставить мою программу продолжить работу и обработать исключение? Я не могу справиться с этим вне foreach, не могу объяснить почему, потому что это займет слишком много времени (и я уверен, что вы, ребята, заняты: P). Есть идеи?

Я уже пробовал так:

foreach (string s in myField.getChilds() ?? new ArrayList(1)) {
        if (s == null)
            //handle null
        else
            //handle normal value 
    }

Но это не работает, программа просто прыгает в конце foreach, но я хочу, чтобы он вместо нее входил в foreach!

Ответы [ 3 ]

11 голосов
/ 20 декабря 2010

Один из способов сделать это (хотя и не лучший):

foreach (string s in myField.getChilds() ?? new string[] { null })

или

foreach (string s in myField.getChilds() ?? new ArrayList { null })

Причина, по которой new ArrayList(1) не работает, заключается в том, что он создаетсписок, который имеет емкость для хранения 1 элемента, но все еще пуст.Однако new string[] { null } создает строковый массив с единственным элементом, который имеет нулевое значение, а это то, что вам нужно.

2 голосов
/ 20 декабря 2010

, если это myField.getChilds (), которая может содержать нуль

чем

foreach (string s in myField.getChilds()) {
if (string.IsNullOrEmpty(s))
    //handle null
else
    //handle normal value 

}

таким образом, вы можете обрабатывать пустые или пустые строки.

2 голосов
/ 20 декабря 2010
var children = myField.getChilds();
if (children == null)
{
    // Handle the null case
}
else
{
    foreach (string s in children)
    {

    }
}

или просто используйте оператор объединения нулей :

foreach (string s in myField.getChilds() ?? Enumerable.Empty<string>())
{

}
...