不允许使用`?`检查null和set值。

弯蛋

为什么使用new ?运算符设置值以进行非null的预检查不能用于分配?

例如:

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

由于出现错误,因此无法编译:

分配的左侧必须是变量,属性或索引器。

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

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

谢尔盖(Sergey Kalinichenko)

C#编译器肯定会通过声明?s评估为来null停止所有进一步的处理,从而使此语句起作用

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

entry?.Value = CallSomeFunctionWithSideEffects(123);

当总是评估右侧时,其语义与其他任务完全不同。但是,这里需要推迟对右侧的评估,直到已知左侧产生无null为止

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

entry?.SetValue(CallSomeFunctionWithSideEffects(123));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不允许使用`?`检查null和set值。

来自分类Dev

这里不允许使用“ set”指令

来自分类Dev

不允许使用“$__”

来自分类Dev

CloudFormation错误[/资源]模板中不允许使用'null'值

来自分类Dev

熊猫“不允许使用重叠的键和值进行替换”

来自分类Dev

RPG编程中是否不允许使用null?

来自分类Dev

值错误:合并时不允许使用负尺寸

来自分类Dev

为什么ArrayDeque中不允许使用空值?

来自分类Dev

Yaml错误-此处不允许使用映射值

来自分类Dev

不允许在 textarea 值中使用 url

来自分类Dev

球拍不允许使用列表和配对

来自分类Dev

不允许混合使用XOP / MTOM和附件

来自分类Dev

不允许使用Django + Angular方法PUT和POST

来自分类Dev

405 方法不允许使用 Resteasy 和 ajax

来自分类Dev

检查数组中不允许的键?

来自分类Dev

允许左值引用和不允许右值引用作为函数参数?

来自分类Dev

模板包含错误。:[/ Resources / CloudTrail / Type / EventSelectors] AWS CloudFormation CloudTrail的模板中不允许使用'null'值

来自分类Dev

Symfony:不允许以null值为已设置为null的值true

来自分类Dev

不允许选择下拉空值

来自分类Dev

xmlns不允许xslt更新值

来自分类Dev

不允许更新特定索引的值

来自分类Dev

Jpinner setModel不允许更改值

来自分类Dev

不允许更新特定索引的值

来自分类Dev

不允许用户输入重复值

来自分类Dev

Ruby 不允许我比较值

来自分类Dev

不允许Docker和Nginx操作

来自分类Dev

PHP和.htaccess不允许$ _GET

来自分类Dev

Kendo UI内联检查不允许空格和其他符号

来自分类Dev

UIImagePickerController允许我拍摄照片和视频,但不允许我保存或“使用”它们

Related 相关文章

热门标签

归档