Запрос, связанный с условным оператором if - PullRequest
1 голос
/ 07 июля 2011

У меня есть метод, в котором я сделал что-то вроде:

int? products= formvalues["number"] == "" ? (int?)null : Convert.ToInt32(formvalues["number"]);
if(products.HasValue)
{ 
    // do some calulation
}

Проблема в том, что я не хочу делать вычисления, если продукт имеет 0 или нулевое значение, иначе сделайте расчет, Как я могу это сделать?как текущая логика, избегайте вычислений, когда она равна нулю, но не избегайте, когда продукт имеет значение 0

Ответы [ 5 ]

7 голосов
/ 07 июля 2011
if(products.HasValue && products !=0)
{ 
    // do some calculation
}

Это работает, потому что if использует Оценка короткого замыкания : условие products!=0 оценивается, только если product.HasValue истинно.

Edit:

Этот конкретный оператор if также будет работать без оценки короткого замыкания, начиная с null!=0 - элюирование короткого замыкания полезно, если вам нужно получить доступ к члену переменной, добавив перед ним нулевую проверку в операторе if. *

Также, как указывалось, Nullable<T> предоставляет метод GetValueOrDefault() для выполнения той же проверки, что и выше (@Bradley получил мой +1) - в данном случае это вопрос личных предпочтений / читабельности, который следует использовать.

Кроме того, real для ответа на ваш вопрос следует использовать Int32.TryParse() вместо «ручного» подтверждения ввода.

5 голосов
/ 07 июля 2011

Используя свой оригинальный код, вы можете написать:

if (products.GetValueOrDefault() != 0)
{
    // do some calulation
}

GetValueOrDefault вернет 0, если products равно null.

Однако я, вероятно, написал бы это следующим образом (чтобы избежать возможного FormatException выброса Convert.ToInt32 невозможности анализа данных, предоставленных пользователем):

int products;
if (int.TryParse(formvalues["number"], out products) && products != 0)
{
    // do some calculation
}
2 голосов
/ 07 июля 2011

Избавьтесь от nullable int и выполните более безопасное преобразование:

 int products;
 bool parsed = Int32.TryParse(formvalues["number"], out products);
 if (parsed && products != 0)
 {

 }
1 голос
/ 07 июля 2011

Я предпочитаю это if((products ?? 0) != 0){}

1 голос
/ 07 июля 2011

Попробуйте это

if (products.HasValue && products.Value != 0)
{
    // do some calulation
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...