Найти нулевое значение Datatable

#c# #.net #nullreferenceexception

#c# #.net #исключение nullreferenceexception

Вопрос:

Я создаю лямбда-функцию AWS .net core.

Проблема, с которой я сталкиваюсь, заключается в том, что когда в строке / столбце datatable нет данных, я все равно получаю значение, равное единице, в свою очередь, по getData != null amp;amp; getData.Count() > 0 умолчанию используется значение true, а затем выдает NullRefrenceError поскольку значение равно null при переходе в цикл, я попытался проверить наличие нескольких типов null в datatable, для которых поумолчанию по-прежнему установлено значение true.

Есть ли другой способ проверить наличие значений с нулевым значением, чтобы избежать присвоения, вызывающего ошибку в datatable столбце / строке.

 public object emailGets ( AType invoiceNum, ILambdaContext context )
        {
         Connection conn = new Connection();

         try 
         {
            string query = "SELECT QUERY";
            conn.getData(query);

                DataRow[] getData = conn.Dt.Select();


            if(getData != null amp;amp; getData.Count() > 0)
            {

            foreach (var item in getData)
            {
              string yourItem = item.Field<String>("email").ToString();
            }
            return new userData { email = yourItem};
            }
             else 
            {

            return new userEmailAddress { email = null}; 
            }
            
        } catch ( Exception e )
         {
             throw e; 
         }

        }
    }

 public class userEmailAddress
    {
        public string email { get; set; }
    }
  

Комментарии:

1. a) Не могли бы вы обновить код, чтобы в нем были явные объявления типа (вместо var ) в тех случаях, когда тип не виден с левой стороны? б) Откуда вы берете NullReferenceException ?

2. Кроме того, включены ли в вашем проекте обнуляемые ссылочные типы ?

3. @devNull спасибо за ответ, я пошел дальше и обновил строгую типизацию, кажется, я получаю NullReferenceError в цикле foreach. Я не знал, что мне нужны ссылочные типы с нулевым значением, поскольку я прочитал в документах, что String это ссылочный тип и всегда имеет значение null, ничего не нужно.

4. Вам не нужны включенные ссылочные типы с нулевым значением. Но знание того, включено ли оно, сужает основную причину

Ответ №1:

ToString() выдаст NullReferenceException , когда источник равен нулю. Поэтому, когда вы делаете

 string yourItem = item.Field<String>("email").ToString();
  

и item.Field<String>("email") часть возвращает null, вы получите это исключение.

К счастью, этот ToString() вызов избыточен, поэтому вы можете просто удалить его и просто иметь:

 string yourItem = item.Field<String>("email");
  

Имейте в виду, что yourItem теперь здесь может быть null.

Комментарии:

1. Что заставляет меня задуматься, так это то, почему первое условие не улавливает это. Тем не менее, это все еще позволяет ему перейти в цикл.