gpt4 book ai didi

c# - 不允许使用 `?` 检查空值和设置值

转载 作者:行者123 更新时间:2023-11-30 19:37:39 26 4
gpt4 key购买 nike

为什么使用 new 设置一个值? 运算符用于预检查 非空不能用于赋值?

例如:

var list = // ... Some list
var entry = list.FirstOrDefault();
entry?.Value = 123;

由于错误无法编译:

The left-hand side of an assignment must be a variable, property or indexer.

但是调用方法或其他东西是可行的。

这种编译器行为的原因是什么?

最佳答案

C# 编译器肯定可以通过声明一旦 ? 链的计算结果为 null,所有进一步的处理都会停止,从而使该语句有效。

然而,问题是当右侧出现副作用时该怎么办:

entry?.Value = CallSomeFunctionWithSideEffects(123);

当右侧始终被计算时,此任务的语义与其他任务截然不同。然而,在这里,右侧的评估需要推迟,直到已知左侧产生非 null 值。

函数调用不会遇到同样的问题,因为调用目标是在参数之前处理的:

entry?.SetValue(CallSomeFunctionWithSideEffects(123));

关于c# - 不允许使用 `?` 检查空值和设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37183298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com