2009-06-15 4 views
0

私は少し見てきましたが、それと同等の問題は見つかりませんでした。
このコーディングは悪いですか?私はそれを簡単に読むことができますが、コードを読んでいる人にとってはあまりにも秘密ですか?評価者を3者式で統合するのは悪いですか? (C#)

bool? testBool = null; 
string result; 
result = (testBool ?? false ? "Yes" : "No"); 

編集:いくつかの恐ろしいコードの皆さんに私の謝罪!ここに実例があります。
私は返信のスピードに少し驚いています。私はこれを削除し、それを正しく行うつもりでしたが、すでに4つの回答がありました!

+0

私はそれがわかりにくいと思います! –

+0

私はこのコードがコンパイルされないと思うのですが、テストブールは整数です –

+1

変更後、コンパイルされますが、IMHOは読み込めません。 –

答えて

10

私は括弧を追加して、何が起こっているのかを明確にしたいと思います。

bool? testbool = null; 
string result; 
result = (testbool ?? false) ? "Yes" : "No"; 

これで、私はそれでうまくいくでしょう。それがなければ、何が起こっているのか把握するためにちょっと調べなければなりませんでした(コンパイルしても、私の頭の上からの操作の順序は分かりません):

+4

+1多くのことを助ける。オリジナル表現はWTFです(「コード品質の唯一の真の尺度 - WTF /分」という意味で) – peterchen

2

編集:元の質問はint?を使用しました。これは修正されました。

そのコードはコンパイルされていないので、あまりにも謎です。

タイプミスはさておき、あなたは問題があることををスポッティング簡単せずにそれを掲示しているという事実は、(あなたはLHSがint?あるとき、??のRHSにboolを使用しようとしている)、それはありません示唆しますあなたがそれを正しくしても良いアイデア。

実際の例を見る必要がありますが、私はだと思います。通常、は、これをヌル合体演算子を使用して1つのステートメントに分割し、次に条件演算子を使用して分割します。別のオプションは、演算子に関連してnull可能な型の振る舞いを使用することです...でも、それは合理的にです。

私は一般的にヌル合体演算子が好きですが、私はそれを条件演算子と組み合わせることで、あまり目立たないように思えます。私はおそらく、単一の表現(例えば、代替が追加のメソッドを導入している初期化のための)に大きなメリットがあったとしても、それを受け入れるだろうと思っていますが、一般的には2つのステートメントに分割したいと思います。

EDIT:での1つの選択肢は、この特定の場合には、単に「真」と比較することである - 冗長に見えますが、bool?の場合にはされていない。

result = (testBool == true) ? "Yes" : "No"; 

括弧は必要ありません、もちろん、明確なIMOを追加します。

これはもっと簡単だと思います。testBoolが実際にtrueの場合、結果は「はい」になります。それ以外の場合は「いいえ」です。

result = (testBool == false) ? "No" : "Yes"; 
+0

あなたは大丈夫です、私は実際に生産コードを参照することなく例を投稿しようとしています。私は適切な例を作ったら、その質問を削除します。 – CaptainCasey

+0

削除できません..編集が十分でなければなりません。 – CaptainCasey

1

ラップしてもいいと思います。

string result = (testbool ?? false) ? "Yes" : "No"; 

そうでなければ、意図した操作の順序は、それが機能しても明らかではありません。

(編集:ジョナサンはピンチで私を倒す)

0

それは

bool? testbool = null; 

ではないでしょうか?

ここではnullを使用する必要はありません。これは私が二度考えさせるので、私は本当にあなたの例が不完全であった場合、私は知らない

bool testbool = false; 
string result; 
result = testbool ? "Yes" : "No"; 

としてそれをコーディングしたいが、私はその後、NULL可能とを使用するよりも正気であるデフォルト値に変数を初期化すると思います?演算子を使用して宣言の後の値を設定します。

2

式が評価されるかのように、それも明らかに不可解側のビットではないです:あなたは代わりにNULL可能タイプのGetValueOrDefault方法を使用することができます

string result = testbool ?? (false ? "Yes" : "No"); 

string result = (testbool ?? false) ? "Yes" : "No"; 

??オペレータの読みやすくするために:

bool? testbool = null; 
string result = (testbool.GetValueOrDefault(false) ? "Yes" : "No"); 
関連する問題