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

ins*_*aul 2 c# if-statement

如果我知道左侧将失败但是如果左侧通过右侧将被实例化,我可以将一个尚未在"AND"运算符右侧实例化的object.property放入?

在下面的示例中,第一个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;                        
        }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

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

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

该操作x && y对应于操作x & y,除非y仅在x不为false时进行评估.