#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. Что заставляет меня задуматься, так это то, почему первое условие не улавливает это. Тем не менее, это все еще позволяет ему перейти в цикл.