查询与if条件运算符相关

时间:2011-07-07 15:05:48

标签: c# if-statement

我有一个方法,我做了类似的事情:

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

问题是我不想做计算,如果产品有0或null值,否则做计算,我怎么能这样做,因为当前逻辑避免计算时它的null但它不会避免当产品有0值

5 个答案:

答案 0 :(得分:7)

if(products.HasValue && products !=0)
{ 
    // do some calculation
}

这是有效的,因为if正在使用Short-circuit evaluation:只有在products!=0为真时才评估product.HasValue条件。

修改

这个特殊的if语句也可以在没有短路评估的情况下工作,因为null!=0 - 如果你必须通过在if语句前面加上空值检查来访问变量的成员,那么短路验证很有用。

同样指出Nullable<T>提供了GetValueOrDefault()方法来执行与上面相同的检查(@Bradley得到我的+1) - 在这种情况下,这是个人偏好/可读性的问题,使用

真实回答您的问题应该是使用Int32.TryParse()而不是“手动”尝试验证输入。

答案 1 :(得分:5)

使用原始代码,您可以写:

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

GetValueOrDefault将返回0。

但是,我可能会将其写成如下(以避免FormatException未能解析用户提交的数据而引发的潜在Convert.ToInt32

int products;
if (int.TryParse(formvalues["number"], out products) && products != 0)
{
    // do some calculation
}

答案 2 :(得分:2)

摆脱可以为空的int并执行更安全的转换:

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

 }

答案 3 :(得分:1)

试试这个

if (products.HasValue && products.Value != 0)
{
    // do some calulation
}

答案 4 :(得分:1)

我更喜欢这个if((products ?? 0) != 0){}