它是坏凝聚的评估程序在一个三元的表达吗?(C#)
-
13-09-2019 - |
题
我看起来周围的一点并没有发现同等问题。
是这个编码糟糕的做法?我可以读它很容易,但是这太神秘的人阅读的代码?
bool? testBool = null;
string result;
result = (testBool ?? false ? "Yes" : "No");
编辑: 我道歉,大家对一些可怕的代码!这里是工作的例子..
我有点不知所措的速的答复。我要删除这个和这样做是正确的,但已经有4的答复!
解决方案
我加括号所以澄清什么事--即。
bool? testbool = null;
string result;
result = (testbool ?? false) ? "Yes" : "No";
我会被罚款。没有它,我必须研究一下图找出是什么(如果它甚至还汇编了-我不知道操作的顺序掉我的头顶?:与??)
其他提示
这是一个位在隐晦的一面,它甚至不是显而易见,如果表达的是评估为:
string result = (testbool ?? false) ? "Yes" : "No";
或者:
string result = testbool ?? (false ? "Yes" : "No");
你可以使用 GetValueOrDefault
方法的空类型,而不是的 ??
操作员,以使它更具可读性:
bool? testbool = null;
string result = (testbool.GetValueOrDefault(false) ? "Yes" : "No");
编辑:原来的问题用一个 int?
.它现在已经固定的。
这些代码甚至不会编制的,所以是的,我会说这是太神秘。
拼写错误一边,事实上,你们发布这不容易 斑点 有一个问题(你试图使用一个 bool
在右轴的??, 当左轴是 int?
)表明它不是一个很好的想法,甚至当你得到它的权利。
我需要见一个真实世界的例子,但我觉得我会 通常 分这一声明使用空聚结的操作者,然后又使用了有条件的操作员。另一个 选项 是使用行为的空类型有关的经营者...但是,那是 合理 模糊不清。(我只是不得不提醒自己,究竟什么行为是!)
我喜欢空结合运营商在一般情况下,但我认为,结合有条件的操作者只是让它一点点模糊不清。我想我可能会接受它在一种情况,那里有一个显着的益处,它是一个单一的表达(例如对于初始化那里的选择是引入一个额外方法),但在一般情况下我更愿意把它分成两句。
编辑:一个替代办法 此 特定情况下是只是比较对"真实"-它看起来多余的,但不在的情况 bool?
:
result = (testBool == true) ? "Yes" : "No";
方括号并不是必要的,当然,但是增加清晰度国际海事组织。
我觉得这是简单的:结果仅仅是"是"如果 testBool
实际上是正确的;否则就是"没有"。如果你想的"默认",是的,你写的:
result = (testBool == false) ? "No" : "Yes";
包装它而且我觉得它是好的。
string result = (testbool ?? false) ? "Yes" : "No";
否则的订单的行动,即使它的工作原理,是不是显而易见的。
(编辑:乔纳森打败我的一个紧要关头。)
它不应该被
bool? testbool = null;
?
我发现没有必要使用一个可以为空在这里。这让我想到两次,所以我真的很码为
bool testbool = false;
string result;
result = testbool ? "Yes" : "No";
我不知道如果你的例子就是不完整的,但我认为初始化的变量的默认值是理智的比使用可空,然后??操作员设置的价值之后宣言》。