为什么使用new ?
运算符设置值以进行非null的预检查不能用于分配?
例如:
var list = // ... Some list
var entry = list.FirstOrDefault();
entry?.Value = 123;
由于出现错误,因此无法编译:
分配的左侧必须是变量,属性或索引器。
但是,调用方法或其他方法是可行的。
这种编译器行为的原因是什么?
C#编译器肯定会通过声明?
s链评估为来null
停止所有进一步的处理,从而使此语句起作用。
但是,问题是当右侧出现副作用时该怎么办:
entry?.Value = CallSomeFunctionWithSideEffects(123);
当总是评估右侧时,其语义与其他任务完全不同。但是,这里需要推迟对右侧的评估,直到已知左侧产生无null
值为止。
函数调用不会遇到相同的问题,因为调用目标是在参数之前进行处理的:
entry?.SetValue(CallSomeFunctionWithSideEffects(123));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句