Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Null传播运算符和Null合并运算符引发Null异常_C#_Null Coalescing Operator_Argumentnullexception_Null Propagation Operator - Fatal编程技术网

C# 使用Null传播运算符和Null合并运算符引发Null异常

C# 使用Null传播运算符和Null合并运算符引发Null异常,c#,null-coalescing-operator,argumentnullexception,null-propagation-operator,C#,Null Coalescing Operator,Argumentnullexception,Null Propagation Operator,我正在尝试获取链接变量中的空值 我已经创建了三个脚本。一级,二级,三级。级别1的公共变量为级别2,级别2的公共变量为级别3,并在级别3中设置对象变量 使用Null传播操作符,我将它们链接在一起,并尝试在level3中输出对象的名称 我故意从level1init函数中注释掉level2的设置,以导致错误 这就像预期的那样。然后,我添加了一个null合并操作符,试图确定链式检查中的哪个值为null。这就是我陷入困境的地方 公共类级别1 { 公共级别2 m_级别2; //在第一帧更新之前调用Start

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

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

使用Null传播操作符,我将它们链接在一起,并尝试在level3中输出对象的名称

我故意从level1init函数中注释掉level2的设置,以导致错误

这就像预期的那样。然后,我添加了一个null合并操作符,试图确定链式检查中的哪个值为null。这就是我陷入困境的地方

公共类级别1
{
公共级别2 m_级别2;
//在第一帧更新之前调用Start
void Init()
{
//m_level2=新的level2();
字符串sName=m_level2?.m_level3?.m_obj3?.name??抛出新的ArgumentNullException(nameof(m_level2),“变量不能为null”);
Console.WriteLine(“名称:+sName”);
}
}
在我的控制台中,我得到了错误

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


这是有道理的,但这只是因为我在nameof()检查中加入了'm_level2',我需要知道在那里放什么,这样它就可以知道链中哪个变量是空的。

你不能。即使
name
为空,也会返回null。您需要编写一个if()的链。您必须单独检查每个属性(即m_level2、m_level_3、m_obj3、name)。顺便说一下,我觉得
ArgumentNullException
在这里并不正确:您没有传递给此方法的参数。自定义异常可能更好。您正在直接引用未实例化的属性。此时甚至没有到达null传播运算符。