2009-04-29 4 views
0

Бизнес-объект возвращает short? тип данных.Будет ли этот код нарушен?

Как бы получить это значение в переменной?

short? myShort = SomeBusinessObject.UserBlah; 

Это правильно? Будет ли он сломаться, если он равен нулю?

+0

Думаю, вам нужно уточнить, что вы думаете, может быть пустым. Многие ответы дают предположения о том, что возвращает UserBlah. Мое предположение (и, следовательно, мой ответ) заключается в том, что вы пытаетесь защитить от SomeBusinessObject равным нулю. Однако это предположение, и больше информации было бы хорошо. –

ответ

2

Действительно ли вы пытаетесь защитить от SomeBusinessObject равным нулю? Если это так, типы с нулевым значением не помогут вам. Вам все еще нужно проверить, является ли ваш SomeBusinessObject нулевым.

Я предполагаю, что это так, потому что если UserBlah возвращает короткий, то он никогда не будет пустым (поскольку короткий не является типом с нулевым значением).

1

myShort будет null если бизнес-объект возвращается null.

Нельзя ссылаться на myShort как тип значения, поэтому это нормально.

Вы можете использовать myShort.HasValue, чтобы узнать, myShort is null или нет.

Используйте myShort.Value, чтобы получить стоимость. Он выдает исключение, если значение не определено.

Вы можете использовать GetValueOrDefault() и передать значение по умолчанию, чтобы получить значение, даже если оно не определено (null). Эта функция возвращает значение, которое вы передали, если тип с нулевым значением - null.

1

myShort будет аннулирована, только если UserBlah неявно конвертируются в Nullable<Int16> и устанавливается нулевое значение, в этом случае он не сломается, если вы пытаетесь получить доступ к члену myShort.Value.

Вы также можете сделать это:

short defaultValue = 0; 
short myShort  = SomeBusinessObject.UserBlah ?? defaultValue; 
4

Это правильно. У вас есть только беспокоиться, если вы присваиваете myShort к ненулевым Короче говоря, в этом случае вы должны проверить HasValue, например, так:

short s = myShort.HasValue ? myShort.Value : (short) 0; // or some other short value 
+2

GetValueOrDefault() – Nick

+0

Еще лучше. Я использую этот синтаксис, потому что по умолчанию 0, и мы используем * .MinValue, если значение DB равно null. Мы по-прежнему переходим к типам NULL с устаревшей системой. –

+0

Используйте нулевой оператор коалесценции вместо указанного выше шаблона. –

4

Чтобы получить его в переменное использовании myShort.Value после проверки myShort .HasValue

2

не забывайте о нулевом операторе коалесценции.

short myShort = SomeBusinessObject.UserBlah ?? 0; 

если SomeBusinessObject.UserBlah имеет нулевое значение, он просто передает значение справа от ?? поэтому вы можете по умолчанию что-то сказать.

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