查询与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(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
}
如果products
是null
, 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){}