0

少し調べてみましたが、同等の質問が見つかりませんでした。
これは悪いコーディング方法ですか? 私は簡単に読むことができますが、コードを読む人にとっては難解すぎますか?

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

編集:恐ろしいコードについて皆さんにお詫びします! これが実用的な例です..
返信の速さに少し圧倒されています。これを削除して正しく行うつもりでしたが、すでに 4 件の返信がありました。

4

5 に答える 5

10

括弧を追加して、何が起こっているのかを明確にします-つまり。

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

それなら、私はそれでいいでしょう。それがなければ、何が起こっているのかを理解するために少し勉強しなければなりませんでした(コンパイルさえできたとしても、?: と ?? の操作の順序が頭の中でわかりません)。

于 2009-06-15T06:36:45.880 に答える
2

編集:元の質問では、int?. 現在は修正されています。

そのコードはコンパイルさえできません。

タイプミスはさておき、問題があることに簡単に気付かずに投稿したという事実(bool LHS が であるときに、?? の RHS でa を使用しようとしているint?) は、たとえ正しく理解できたとしても、それは良い考えではないことを示唆しています。 .

実際の例を見る必要がありますが、通常はこれを null 合体演算子を使用して 1 つのステートメントに分割し、次に条件演算子を使用して別のステートメントに分割すると思います。もう 1 つのオプションは、演算子に関連して null 許容型の動作を使用することです...しかし、これもかなりあいまいです。(私はちょうどその行動が何であるかを正確に思い出さなければなりませんでした!)

私は一般的に null 合体演算子が好きですが、それを条件付き演算子と組み合わせると、少しあいまいになるだけだと思います。単一の式であることに大きな利点がある場合(たとえば、代替手段が追加のメソッドを導入する初期化など)はおそらく受け入れると思いますが、一般的には2つのステートメントに分割することを好みます。

編集:この特定のケースの1つの代替方法は、「true」と比較することです-これは冗長に見えますが、次の場合はそうではありませんbool?:

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

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

これはもっと簡単だと思いtestBoolます。実際に真の場合、結果は「はい」になります。それ以外の場合は「いいえ」です。「デフォルト」で「はい」にしたい場合は、次のように記述します。

result = (testBool == false) ? "No" : "Yes";
于 2009-06-15T06:34:54.187 に答える
2

それは少し不可解な側にあり、式が次のように評価されるかどうかは明らかではありません。

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

また:

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

GetValueOrDefault演算子の代わりに nullable 型のメソッドを使用して、??読みやすくすることができます。

bool? testbool = null;
string result = (testbool.GetValueOrDefault(false) ? "Yes" : "No");
于 2009-06-15T06:46:42.097 に答える
1

巻いて大丈夫だと思います。

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

そうしないと、動作する場合でも、意図した操作の順序が明確ではありません。

(編集:ジョナサンはピンチで私を打ち負かしました。)

于 2009-06-15T06:37:44.990 に答える
0

そうじゃないかな

bool? testbool = null;

?

ここで nullable を使用する必要はありません。これは私に二度考えさせるので、実際には次のようにコーディングします

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

あなたの例が不完全だったかどうかはわかりませんが、変数をデフォルト値に初期化する方が、nullable を使用してから ?? を使用するよりも適切だと思います。宣言の後に値を設定する演算子。

于 2009-06-15T06:38:02.167 に答える