查询与if条件运算符相关

本文关键字:条件运算符 if 查询 | 更新日期: 2023-09-27 18:01:23

我有一个方法,我做了这样的事情:

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

问题是我不想做计算如果产品有0或null值否则做计算,我怎么能做到这一点,作为当前的逻辑避免计算当它为空,但它不避免当产品有0值

查询与if条件运算符相关

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

这可以工作,因为if使用Short-circuit求值:products!=0条件只在product.HasValue为真时求值。

编辑:

这个特殊的if语句也可以在没有短路计算的情况下工作,因为null!=0 -短路计算是有用的,如果您必须通过在if语句中使用null检查来访问变量的成员。

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

真正的回答你的问题应该是使用Int32.TryParse()而不是"手动"尝试验证输入。

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

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

如果productsnull, GetValueOrDefault将返回0。

然而,我可能会这样写(为了避免Convert.ToInt32无法解析用户提交的数据而引发的潜在FormatException):

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

去掉可为空的int并执行更安全的转换:

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

试试这个

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

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