我看起来周围的一点并没有发现同等问题。
是这个编码糟糕的做法?我可以读它很容易,但是这太神秘的人阅读的代码?

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";

我不知道如果你的例子就是不完整的,但我认为初始化的变量的默认值是理智的比使用可空,然后??操作员设置的价值之后宣言》。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top