Обработка Null Обработка исключений в цикле foreach

У меня есть список X с некоторой строкой и нулевым значением. Я повторяю цикл foreach, чтобы связать значение с текстовым полем. Если я получу нулевые значения в моем списке X, цикл 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}}

Ответ 1

Попробуйте ввести код:

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

}

Ответ 2

Этот код выглядит довольно подозрительным для меня.

Во-первых, у вас действительно есть список списков? Если это так, я бы предположил, что вам нужно также перебирать каждый элемент во внутреннем списке:

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

Во-вторых, вы уверены, что переменная Lists не содержит нулей? Возможно, это фактически x, которое является нулевым, и что причина вашего Null Reference Exception:

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

Ответ 3

Предоставленный код неверен. Я предполагаю, что вы хотите проверить X для Null в цикле foreach. Если это логически правильно или нет, вместо этого вы можете только знать, что логика выходит за рамки предоставленного кода и зависит от того, где вы на самом деле его используете.

Я лично не вижу ничего плохого, чтобы проверять нули в цикле foreach.

Вы также, например, можете использовать Linq для запроса сначала для значений Null и после значений Non Null. Вопрос выбора дизайна.

С уважением.

Ответ 4

Список x в списках? Вы, вероятно, хотите сделать:

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

И действительно ли строки являются нулевыми или просто пустыми? Это разница.

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

Я подозреваю, что проблема заключается в неправильной реализации цикла foreach, который вызывает посылку нулевых ошибок, поскольку объекты внутри цикла не существуют.

Ответ 5

Почему бы вам не использовать его так же, как оператор с нулевым коалесцированием

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

оператор называется нуль-коалесцирующим оператором. Он возвращает левый операнд, если операнд не равен нулю; в противном случае он возвращает правый операнд.

Ответ 6

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

Надеюсь, что эта конструкция полезна!