当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能做?=在C#中?

如何解决《为什么我不能做?=在C#中?》经验,为你挑选了6个好方法。

我经常发现自己在做:

foo = foo ?? x;

为什么我不能这样做:

foo ??= x;

编辑:我知道这不是语言的一部分......我的问题是"为什么不"?我发现重复"foo"的必要性令人不愉快并且可能容易出错.它看起来像丑陋一样:

foo = foo + x;

Brian Genisi.. 19

当我想到它时,

foo = foo ?? x 

真是公正

foo = foo != null ? foo : x

在这一点上,+ =的类比开始分崩离析.



1> Brian Genisi..:

当我想到它时,

foo = foo ?? x 

真是公正

foo = foo != null ? foo : x

在这一点上,+ =的类比开始分崩离析.



2> Jon Skeet..:

没有理由不能有这样的操作员,但我怀疑语言的复杂程度虽然微不足道,但却超出了利益(我认为"非常轻微").

基本上任何语言的添加都有很高的清晰度.你说你经常使用它 - 多久一次,真的吗?虽然我认为??方便,但我不能说我甚至经常使用它.



3> Jay Bazuzi..:

通常,C#语言设计团队对添加新语法是保守的.他们说,必须权衡语言增加的价值与语言复杂性增加的代价.

Peter Hallam曾担任C#编译器开发主管一段时间,也是C#语言设计团队的成员.他写了一篇关于测量新功能的方法,称为Yardstick,尽管他更关注交互式GUI功能而不是语言功能.

本文与以下问题特别相关??=:

通常,正确的设计决策是不改变任何东西.这可能是我在C#语言设计会议上观看Anders时学到的最重要的一课.通常会提出一种语言领域,其中可能会产生一些真正的收益.我们可以防止用户出现常见的编码错误,或者我们可以提高某个问题域的语言可用性.然后经过深思熟虑后,通过解决问题的所有选项,答案就是......没事!即使问题是有效的,看起来我们应该能够添加一些东西来改善这种情况,但经过仔细的反思后,没有办法解决不超过解决方案收益的问题.我见过Anders所做的许多最重要和最有价值的决定都是决定不增加语言的复杂性,除非增加的价值证明了复杂性.在边缘情况下,他几乎总是选择添加一些边缘的东西.

参考文献:

码尺

程序员真正做了什么?



4> Ates Goral..:

??它不是"操作符",因为它使用操作数的值进行"操作".您应该将其视为语言构造.

假设你有:

node = node.next;

那么您是否希望能够执行以下操作?

node .= next;

我认为??=不存在的原因.=与不存在的原因相同.

此外,一元运算符一样+=,*=等有在装配水平直接对口.伪汇编:

add reg0, 1
mul reg1, 5

这些运营商的存在只是"自然".


运算符和语言结构之间的区别是什么?"node.= next;" 至少有语法上的相似之处,一致的语法总是很好.我也不特别关心运营商有直接汇编的同行.

5> Jeff Yates..:

没有操作员执行此操作.但是,对于该语言的未来版本,这是一个有趣的建议.我怀疑它到目前为止还没有被包括在内,因为合并运算符的主要用例??是Nullable类型,并获得如下值:

int? testValue;

return testValue ?? 0;

而不是像你的例子那样的赋值操作.此外,虽然+=保证在所有情况下都修改foo的值,但是+= 0,??=不会.



6> Grant Wagner..:

还有,在讨论的比喻是否一个更简单的答案大家都在丢失??=+=有道理.

问:你为什么不能foo ??= x;用C#做什么?

答:因为每个功能都以负100分开始,所以功能开始不存在,有人必须让它们发生,并且如果他们添加了这个功能,那么这些资源最多可能用于对客户群有更大利益的事情:

...想一想设计功能应该如何工作所需的所有时间和精力,确定所有边界条件,然后对其进行编码,为其编写自动化测试,...编写文档和帮助文本,并继续维护功能预期寿命的代码,测试和文档(在这种情况下可能是永久的).是否所有这些资源都花在了对客户群有更大利益的事情上?(对此的回答总是"是" - 每个人和她的嫂子都可以找到一种方法来完成这句话,"我不敢相信他们一直在浪费这个愚蠢的特征而不是修复......" )

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有