gpt4 book ai didi

c# - 为什么 if 语句表达式不被视为条件?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:07 26 4
gpt4 key购买 nike

我有一个组合框,其中包含日期列表。我想确保用户实际选择了一个日期。所以,我有以下内容:

        if (cmbDateSelecter.SelectedItem.ToString().ToLower().Contains("select") || 
cmbDateSelecter.SelectedItem.ToString().ToLower().Contains("seleccione") ||
cmbDateSelecter.SelectedItem == null)

默认项目是“选择日期”,所以我正在检查这是否是所选项目。这曾经是自己工作的,出于某种我还没有弄清楚的原因,开始抛出 NullReferenceExceptions。所以,我添加了空检查。但是,我仍然遇到异常。但如果我这样做:
if(cmbDateSelecter.SelectedItem == null)
现在,我知道我可以先进行空检查,一切都会变得很糟糕。我的问题是为什么它在抛出异常之前不评估所有表达式?如果其中一个是真的,在我的表达式的情况下(作为空检查),为什么它仍然会抛出异常?

最佳答案

它不会在抛出之前评估所有条件,因为在 C#(以及几乎所有其他编程语言)中,logical OR operator short-circuit evaluation .即使它确实评估了它们,它仍然会抛出,因为评估前两个条件中的任何一个都涉及尝试访问空对象。所以这种行为不会提供解决方案。

然而,短路评估正是允许您通过移动 null 来解决问题的方法。开始检查:如果测试返回 true那么编译器知道整个表达式将是true并跳过评估抛出的表达式。

关于c# - 为什么 if 语句表达式不被视为条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13179287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com