2013-10-08 6 views
1

Может кто-то прокомментировать вопрос, который у меня есть. Тернарный оператор выдает ошибку, и здесь аргумент состоит в том, что если он оценивает значение null, он должен игнорировать часть после двоеточия. Часы, установленные для этого, указывают на исключение:Тернарный оператор Неожиданный результат

Int32.Parse(SQLDataReader["TrayId"].ToString())' threw an exception of Type 'System.FormatException 

Предполагает, что он не может преобразовать нуль в строку. Так ли это работает?

ShipmentId = SQLDataReader["ShipmentId"] == DBNull.Value ? 0 : Int32.Parse(SQLDataReader["ShipmentId"].ToString()), 
+3

'FormatException' обычно означает, что он не может разобрать его как' int'. –

+1

вы должны увидеть, что вы на самом деле вернетесь. –

+0

попробуйте просто «null» вместо 'DBNull.Value' – Jonesopolis

ответ

1

Рекомендуется, для сравнения с DBNull, используется метод DBNull.Value.Equals, как описано на этой странице: http://msdn.microsoft.com/en-us/library/system.dbnull.value.aspx

ShipmentId = DBNull.Value.Equals(SQLDataReader["ShipmentId"]) ? 0 : Int32.Parse(SQLDataReader["ShipmentId"].ToString()); 
+0

Спасибо за помощь. У меня были некоторые другие проблемы, но ультиматум сработал ваш код! Отличный день, Ник! – Risho

3

Столбец ShipmentId представляет собой целое число, но оно также nullable, что означает, что тип C# int?.

Ошибка сводится к этому коду:

Int32.Parse((string)null) 

Разбор дает, потому что вы не можете включить null в int.

Чтобы исправить это, используйте TryParse.

int ShipmentId = 0; 
int.TryParse(SQLDataReader["ShipmentId"].ToString(), out ShipmentId); 

Это будет охватывать, если значение null, или если по какой-то странной причине значение не может быть фактически преобразуется в междунар (например, «asdf121343fds»).

+0

Спасибо за сообщение. Я попробовал TryParse, и это не сработало, но по другой причине я думаю - мои столбцы не совпадали, что является моей глупой ошибкой. Таким образом, к тому времени, как я попробовал предложение @Nick Raverty, я обнаружил свои несоответствующие столбцы, поэтому это было вопросом, связанным с ними. – Risho

+0

@ Ришо, да, я заметил, что через 15 минут после того, как я отправил свой ответ, ваше сообщение об ошибке и пример кода использовали разные столбцы. – gunr2171

Смежные вопросы