将Null-Propagation运算符与null-coalescing-operator结合使用可引发null异常

时间:2019-06-21 08:29:16

标签: c# null-coalescing-operator argumentnullexception null-propagation-operator

我正在尝试获取链式变量中为空的值

我已经创建了三个脚本。级别1,级别2,级别3。级别1具有级别2的公共变量,级别2具有级别3的公共变量,并在级别3中设置了对象变量。

我使用Null-Propagation运算符将它们链接在一起,并试图在level3中输出对象的名称。

我故意从级别1初始化函数中注释了级别2的设置,以引起错误。

这按预期工作。然后,我添加了一个空coalescing运算符,以尝试确定链式支票中的哪个值为空。这就是我陷入困境的地方。

public class Level1
{
    public Level2 m_level2;

    // Start is called before the first frame update
    void Init()
    {
        //m_level2 = new Level2();

        string sName = m_level2?.m_level3?.m_obj3?.name ?? throw new ArgumentNullException(nameof(m_level2), "variable cannot be null");

        Console.WriteLine("Name: " + sName);
    }
}

在我的控制台中,我收到错误消息

“ ArgumentNullException:变量不能为null 参数名称:m_level2“

这很有意义,但这仅是因为我已经将'm_level2'放入nameof()检查中,我需要知道要在其中放置什么,以便它将知道链中哪个变量为空。

0 个答案:

没有答案