如何在foreach中处理NullReferenceException?

raz*_*z3r 6 c# foreach nullreferenceexception

foreach (string s in myField.getChilds()) {
    if (s == null)
        //handle null
    else
        //handle normal value 
}
Run Code Online (Sandbox Code Playgroud)

当我运行我的程序时,我得到一个NullReferenceException,因为getChilds可能返回null.如何使程序继续运行并处理异常?我不能在foreach之外处理它,无法解释为什么因为它需要花费太多时间(而且我相信你们很忙:P).有任何想法吗?

我已经尝试过这种方式:

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

但它不起作用,程序只是跳到foreach的末尾,但我想让它进入foreach而不是!

Gab*_*abe 11

一种方法(尽管不是最好的方法)是:

foreach (string s in myField.getChilds() ?? new string[] { null })
Run Code Online (Sandbox Code Playgroud)

要么

foreach (string s in myField.getChilds() ?? new ArrayList { null })
Run Code Online (Sandbox Code Playgroud)

究其原因new ArrayList(1)不工作是,它创建了具有列表能力保持1元,但仍然是空的.但是new string[] { null }创建一个带有单个元素的字符串数组,该元素只是null,这是您想要的.

  • 乔恩:当OP说"程序只是跳到foreach的末尾,但我想让它进入foreach!" 我认为这表明他希望将null集合视为包含null的单元素集合. (3认同)