与 if 条件运算符相关的查询

发布于 2024-11-19 02:11:06 字数 277 浏览 1 评论 0原文

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

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

问题是如果产品有 0 或空值,我不想进行计算,否则进行计算,我该如何做到这一点,因为当前逻辑在其为空时避免计算,但它不避免产品价值为 0 时

I have got a method in which I have done something like:

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

The Issue is I dont want to do calculation if product has 0 or null value else do calculation, How can I do that as the current logic avoid calculation when its null but it doesnt avoid when the product has 0 value

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

⊕婉儿 2024-11-26 02:11:06
if(products.HasValue && products !=0)
{ 
    // do some calculation
}

这是有效的,因为 if 正在使用 短路评估:仅当 product.HasValue 为 true 时才会评估 products!=0 条件。

编辑:

这个特定的 if 语句也可以在没有短路评估的情况下工作,因为 null!=0 - 如果您必须访问变量的成员,短路评估很有用通过在 if 语句中添加 null 检查作为前缀。

另外,正如所指出的,Nullable 提供了 GetValueOrDefault() 方法来执行与上面相同的检查(@Bradley 得到了我的+1) - 在这种情况下,它是一个使用哪个取决于个人喜好/可读性。

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

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

This works because if is using Short-circuit evaluation: the products!=0 condition is only evaluated if product.HasValue is true.

Edit:

This particular if statement also would work without short-circuit evaluation since null!=0 - short-circuit evluation is useful if you have to access a member of a variable by prefixing it with a null check in the if statement.

Also as pointed out Nullable<T> provides the GetValueOrDefault() method to do the same check as above (@Bradley got my +1) - in this case it is a matter of personal preference /readability which to use.

Also the real answer your question should be to use Int32.TryParse() instead of "manually" trying to validate the input.

长安忆 2024-11-26 02:11:06

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

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

GetValueOrDefaultproducts为null,a>将返回0。

但是,我可能会按如下方式编写(以避免 Convert.ToInt32 无法解析用户提交的数据时引发潜在的 FormatException):

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

Using your original code, you could write:

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

GetValueOrDefault will return 0 if products is null.

However, I would probably write it as follow (to avoid a potential FormatException thrown by Convert.ToInt32 failing to parse user-submitted data):

int products;
if (int.TryParse(formvalues["number"], out products) && products != 0)
{
    // do some calculation
}
凌乱心跳 2024-11-26 02:11:06

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

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

 }

Get rid of the nullable int and perform a safer conversion:

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

 }
凡尘雨 2024-11-26 02:11:06

试试这个

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

Try this

if (products.HasValue && products.Value != 0)
{
    // do some calulation
}
怎言笑 2024-11-26 02:11:06

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

I prefer this if((products ?? 0) != 0){}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文