如果C#允许使用?? =运算符,那将是非常好的。我发现自己经常写下以下内容:
something = something ?? new Something();
我宁愿这样写:
something ??= new Something();
思考?新的语言扩展总是存在争议。
答案 0 :(得分:15)
像Ruby这样的其他编程语言经常使用它:
something ||= Something.new
答案 1 :(得分:6)
如果'something'是属性访问器的私有字段,则可以执行以下操作....如果发现该字段为空,则执行赋值。
private Something something;
public Something Something
{
get
{
return something ?? (something = new Something());
}
}
答案 2 :(得分:2)
我并不一定反对运营商,但是,那种变量重用对我来说并不像是“正确的方式”。应该是明显的错误指针的错误最终填充了意外的数据,并以某种意想不到的方式工作,等等....
答案 3 :(得分:2)
我实际上是为PHP7实现的。它现在处于RFC提案阶段。 https://github.com/php/php-src/pull/1795
实际上这是关于PHP7中的空合并运算符的问题。检查一下:
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? ‘value’;
I want to check if some var is null and if the same var is null set the same var to ‘value’.
因此我在等于运算符后重复相同的变量,这感觉不对。
所以我觉得我们需要另一个类似于+ =;
的“?? =”运算符$ this-> request-> data [' comments'] [' user_id'] ?? ='value'。因此,如果var为null,则将其设置为“value”,否则保持不变。
在拉取请求中,我试图实现这一点。
$ sapi/cli/php -r '$num = null;$num ??= 5; echo $num;'
5
答案 4 :(得分:1)
我会说??
运算符以及更有针对性的上述模式并不常见,因此新运算符过度。
答案 5 :(得分:1)
由于??
是使用三元运算符的简写,其方式类似于:
(myObject != null) ? myObject : somethingElse;
而不是算术运算的简写,我不认为??=
操作是合适的。这是一个条件运算符。
答案 6 :(得分:-1)
我老实说,首先是对= ++运算符进行了撕裂,而且它的使用相当普遍且常见。从清晰的角度来看,你需要输入的额外几个字符可能不值得更改语言来添加?? =。如果这是投票,我会投票反对语言的改变(好问题,坏主意。: - )
我没有试过这个,但是你可以将??映射到Visual Studio中的一个宏,它只为你做了重写吗?