Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
Проблема происходит, потому что условный оператор не смотрит на то, как значение используется (присвоенный в этом случае) для определения типа выражения - просто истинные/ложные значения. В этом случае Вы имеете пустой указатель и Int32, и тип не может быть определен (существуют настоящие причины, которые это не может просто принять Nullable< Int32> ).
, Если Вы действительно хотите использовать его таким образом, необходимо бросить одно из значений к Nullable< Int32> самостоятельно, таким образом, C# может разрешить тип:
EmployeeNumber =
string.IsNullOrEmpty(employeeNumberTextBox.Text)
? (int?)null
: Convert.ToInt32(employeeNumberTextBox.Text),
или
EmployeeNumber =
string.IsNullOrEmpty(employeeNumberTextBox.Text)
? null
: (int?)Convert.ToInt32(employeeNumberTextBox.Text),
Я думаю, что служебный метод мог помочь сделать этот инструмент для очистки.
public static class Convert
{
public static T? To<T>(string value, Converter<string, T> converter) where T: struct
{
return string.IsNullOrEmpty(value) ? null : (T?)converter(value);
}
}
тогда
EmployeeNumber = Convert.To<int>(employeeNumberTextBox.Text, Int32.Parse);
В то время как Alex предоставляет корректный и ближайший ответ на Ваш вопрос, я предпочитаю использовать TryParse
:
int value;
int? EmployeeNumber = int.TryParse(employeeNumberTextBox.Text, out value)
? (int?)value
: null;
Это более безопасно и заботится о случаях недопустимого входа, а также Вашего сценария пустой строки. Иначе, если вводы данных пользователем что-то как 1b
им подарят ошибочную страницу с необработанным исключением, вызванным в Convert.ToInt32(string)
.
Можно бросить вывод Преобразования:
EmployeeNumber = string.IsNullOrEmpty(employeeNumberTextBox.Text)
? null
: (int?)Convert.ToInt32(employeeNumberTextBox.Text)