foreach循环中的Null异常处理

本文关键字:Null 异常处理 循环 foreach | 更新日期: 2023-09-27 18:04:22

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

我正在检查foreach循环中的条件,但我认为它在逻辑上不正确。

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

foreach循环中的Null异常处理

尝试以下代码:

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

为什么不像这样将其与空合并运算符一起使用

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

??运算符称为空合并运算符。如果操作数不为null,则返回左侧操作数;否则返回右手操作数。

我觉得这个代码很可疑。

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

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

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

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

提供的代码不正确。我想您想在foreach循环中检查X是否为Null。如果这在逻辑上是正确的或不正确的,相反,只有你可能知道,因为逻辑超出了所提供的代码,并取决于你实际使用它的地方

我个人并没有发现在foreach循环中检查null有什么不好的地方。

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

谨致问候。

在列表中列出x?你可能想做:

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

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

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

我怀疑问题出在foreach循环的不正确实现上,因为循环中的对象不存在,导致弹出null错误。

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

希望以上构造有用!

在迭代其字段之前,您必须确保您得到的对象不会返回为null(您的列表,_listObj(。即使你确定你传递的GUID与你试图获得的列表匹配,你也应该检查该对象是否为空,并检查字段的数量,如果你获得了你传递的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
                }
            }
        }
    }
}