C# 如果if的bool参数之一为null,为什么不执行else语句?

C# 如果if的bool参数之一为null,为什么不执行else语句?,c#,unity3d,C#,Unity3d,我这里有一段代码片段: public void ReDrawParallelLines(string lineName, string viewType) { var referenceLineOne = GetLineParams(viewType + ReferenceEnum.One.ToString() + linename); var referenceLineTwo = GetLineParams(viewType + ReferenceEnu

我这里有一段代码片段:

public void ReDrawParallelLines(string lineName, string viewType)
    {
        var referenceLineOne = GetLineParams(viewType + ReferenceEnum.One.ToString() + linename);
        var referenceLineTwo = GetLineParams(viewType + ReferenceEnum.Two.ToString() + linename);

        if (lineName == referenceLineOne.lineParams.lineName)
        {

           //Do certain action with referencelineone
        }
        else if (lineName == referenceLineTwo.lineParams.lineName)
        {
            //Do same action but with referencelinetwo

        }
    }
我注意到,如果referenceLineOne为null,但我有referenceLineTwo,则永远不会执行else语句。我不知道为什么?它的工作原理是不是这样的:如果bool没有通过if,那么继续执行else,它应该通过else。它只是完全跳过内部if语句和else条件,因为referenceLineOne为null。为什么以及如何更正此支票


基本上,我传递的是一个行名,我想检查它是否等于我从GetLineParams函数得到的两行中的一行

由于
referenceLineOne
为空,您将得到一个异常,这就是它绕过else if并跳转到其他地方的原因

您应该像这样执行空检查

if (referenceLineOne != null && lineName == referenceLineOne.lineParams.lineName)
{
   //Do certain action with referencelineone
}
如果你用的是c#6


嗯,好的,referenceLineOne为null的唯一原因是如果线还没有画出来,但我先画referencelinetw。我想我需要一种更好的方法来检查我传递的行名是否等于一个特定的行名,这样我才能运行正确的条件。啊,明白了。谢谢。请注意,如果
lineName
referenceLineOne
都是
null
@BenVoigt和
lineName
的话,这两个代码段的行为会非常不同。我想你是指
=
@ohmusama:是的,就是那个(不可能是另一个)
if (lineName == referenceLineOne?.lineParams.lineName)
{
   //Do certain action with referencelineone
}