c# - 整理 if 语句 - 未实例化的对象是否可以在 AND 运算符中

标签 c# if-statement

如果我知道左侧将失败但如果左侧通过则右侧将被实例化,我能否将尚未实例化的 object.property 放在“AND”运算符的右侧?

在下面的示例中,第一个 if/else 语句为上述问题设置了另一个 if 语句。虽然我已经测试过它没有显示错误,但我想知道幕后发生了什么,或者有没有更好的方法。(有很多 if/else 语句使用第一个 if/else 语句的结果。

        if (_articleGuid.Equals(Guid.Empty))
        {
            isArticleGuid = false;
        }
        else
        {
            article = new Article(Guid.Empty, _articleGuid);
            bodyText = article.Text;
            articleDate = Convert.ToDateTime(article.DateActive);

            isArticleGuid = true;
        }

        if(isArticleGuid && article.Author != null)
        {
            divAuthor.InnerText = article.Author;                        
        }

最佳答案

假设我理解正确,这是安全的。 article 变量需要明确赋值,但语言保证如果 && 运算符的 LHS 表达式的计算结果为 false,则不会计算 RHS 表达式 -所以您不会得到 NullReferenceException

来自 C# 3.0 语言规范,第 7.11 节:

The operation x && y corresponds to the operation x & y, except that y is evaluated only if x is not false.

关于c# - 整理 if 语句 - 未实例化的对象是否可以在 AND 运算符中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325132/

相关文章:

c# - 序列不包含匹配元素 - EntityFramework

c# - 发送附件时无法访问已关闭的流

c# - Visual Studio 不会构建为 exe (.NET Core 2.0)

c# - Selenium - 强制点击不可见元素

java - 对同一件事执行多个 if 语句的更简单方法

javascript - 我的第一个 IF 不工作,但我的 else if 和 else 部分工作 javascript

java - 强制用户仅添加希伯来字母

c# - 如何在 WPF 中将值从窗口传递到用户控件

bash - 在Bash中,为什么 '['和 ']'周围应该有空格?

python - 如何调试 "guessing number"游戏中的错误结果?