C# 操作员有哪些优点或缺点?
我在思考而不是思考C# 操作员有哪些优点或缺点?,c#,language-features,C#,Language Features,我在思考而不是思考 result = result ?? defaultValue; 你可以写 result ?= defaultValue; 我不是说这是个好主意。 该运营商有哪些优势? 这个操作员会有什么缺点?我认为这不值得。一般来说,您几乎总是会执行以下操作: result = someSourceValue ?? defaultValue; 您的第二个表单是一个特例,很少使用 当从某个源(如web服务)读取值时,空合并运算符最有用,并且您希望将缺少的值强制为零或其他默认值。数据几乎
result = result ?? defaultValue;
你可以写
result ?= defaultValue;
我不是说这是个好主意。该运营商有哪些优势?
这个操作员会有什么缺点?我认为这不值得。一般来说,您几乎总是会执行以下操作:
result = someSourceValue ?? defaultValue;
您的第二个表单是一个特例,很少使用
当从某个源(如web服务)读取值时,空合并运算符最有用,并且您希望将缺少的值强制为零或其他默认值。数据几乎总是从某个地方来,又到另一个地方去。可能不是。我在C#中只使用过几次空合并运算符,从来没有这样过。C#的方法是编写显式的空检查,而不是随意赋值。(无意冒犯) 我相信很多人都希望有这个操作符,但我认为它对语言一点好处都没有
这只是我的观点。我看到的最大潜在优势是它能够提供与其他复合运算符(如
+=
)相同的优势。考虑下面的
Method().Field = Method().Field ?? someValue;
如果Method()。为了防止这种情况发生,您需要将其分成两行
var temp = Method();
temp.Field = temp.Field ?? someValue;
如果你被困在这个位置上,这可能会有点乏味。如果?=
具有与+=
相同的保证,即左手侧的副作用只发生一次,则不需要额外的这一行
Method().Field += someValue; // Method() happens once
Method().Field ?= someValue; // Method() happens once
这是拥有?=
操作符而不是简单的?
所提供的关键优势。这将是有价值的,但我认为不值得在语言中添加这一点,之前有人提出过这一点,我在2011年愚人节的博客文章中将这一想法发挥到极致:
与那篇文章中提到的所有其他操作符不同,??=
实际上有点有用。它不足以证明它的“直接”成本——设计、实施和记录,所有这些都需要花费时间、精力和金钱。而且它肯定不会证明它的“机会”成本是合理的——花在做一个相当愚蠢且不是特别有用的操作符上的时间、精力和金钱可以花在直接解决开发人员实际遇到的实际问题的功能上 它会解决什么问题?只有当你想混淆你的代码时。@TimSchmelter:这并不是一个前所未闻的模式+=
,-=
,*=
这是一个有趣的问题……但是在错误的地方。询问这种功能的潜在优势更符合stackoverflow的期望。如果您编辑问题以反映该立场(完全编辑,而不仅仅是添加一行),则问题更有可能被重新编辑空合并运算符在从某些源(如web服务)读取值时非常有用,并且您希望将缺少的值强制为零或诸如此类。我同意。这么多人不理解?
或?:
那么为什么要将?=
添加到组合中呢?作为主持人,你费心回答这个问题,我真的很震惊。这显然只是一个投票问题,没有建设性;这个问题没有答案。它应该马上关闭的恐怖。