foreach循环中的空异常处理

时间:2011-08-04 07:02:50

标签: c# exception-handling null foreach

我正在使用带有一些字符串和空值的列表X.我正在迭代foreach循环以将值绑定到文本框。如果我在列表X中得到任何空值,则foreach循环终止,并获得null异常,如何处理它。

我正在检查每个循环内部的条件。但我认为它不正确。

SPList _listObj = web.Lists[new Guid(listID)];
            SPListItem item = _listObj.GetItemById(Convert.ToInt32(itemID));
           foreach (SPField field in _listObj.Fields)
            {
                if (field.Title != Null)
                {  //do some code}}

7 个答案:

答案 0 :(得分:4)

尝试以下代码:

foreach(var x in Lists.Where(x => x.fiels != null))
{

}

答案 1 :(得分:0)

这段代码看起来很可疑。

首先,你真的有一份清单清单吗?如果是这样,我想你也必须迭代内部列表中的每个元素:

foreach(List list in Lists)
{
    foreach (var x in list)
    {
        if (x.fields != null)
            // blah
        else
            // blah
    }
}

其次,您确定Lists变量不包含任何空值吗?可能它实际上是x,它是null,这是你的Null引用异常的原因:

foreach(List x in Lists)
{
    if (x != null && x.fields != null)
        // blah
    else
        // blah
}

答案 2 :(得分:0)

提供的代码不正确。我想你想在foreach循环中检查X for Null。如果这在逻辑上是正确的,那么只有您可能知道逻辑超出了所提供的代码,并取决于您实际使用它的位置。

我个人认为在foreach循环中检查空值没有什么不好。

例如,您也可以使用Linq首先查询Null值和非Null值。设计选择的问题。

问候。

答案 3 :(得分:0)

在列表中列出x?你可能意思是这样做:

foreach(string x in listvar){
    if(x != null)
       // do something
}

字符串实际上是空的还是空的?这是一个区别。

foreach(string x in listvar){
    if(x != "")
       // do something
}

我怀疑问题在于你的foreach循环的错误实现导致弹出null错误,因为循环内的对象不存在。

答案 4 :(得分:0)

为什么不使用null-coalescing operator

来使用它
   foreach (var item in feeList ?? new List<FeeBusiness>())
   {
           // your code
   }

?? operator被称为null-coalescing运算符。如果操作数不为null,则返回左侧操作数;否则它会返回右手操作数。

答案 5 :(得分:0)

string delimitedvalues = null;//"11,22,33";
foreach(var str in (delimitedvalues?? string.Empty).split(','))
{
    string testvalue = "Test Value" + str;
}

希望上面的结构很有用!

答案 6 :(得分:0)

在迭代其字段之前,必须确保所获取的对象不会以null(您的列表_listObj)的形式返回。即使您确定要传递的GUID与要获取的列表相匹配,也应该检查该对象是否为null,并检查字段数,如果获得要传递的ID的项,在:

SPList _listObj = web.Lists[new Guid(listID)];
if (_listObj != null)  // do we have a list object?
{
    if (_listObj.Fields.Count > 0) // do we have list columns on the list?
    {
        SPListItem item = _listObj.GetItemById(Convert.ToInt32(itemID));
        if (item != null) // did our item ID get a hit?
        {
            foreach (SPField field in _listObj.Fields)
            {
                if (field.Title != null)  // need lower case null, here
                {  
                    //do some code
                }
            }
        }
    }
}