2012-02-21 3 views
3

C#では、私はリターンコードを短縮しようとしています。私がやりたいことは私もいくつかの問題を抱えていそれからElseの略語が代入なしで動作しない場合

condition ? return here:return there; 

または

condition ?? return here; 

のようなもので、コンパイラは、式が有効ではありませんと言います。次に例を示します。

 int i = 1; 
     int a = 2; 
     i < a ? i++ : a++; 

これは無効です。ただし、

 int i = 1; 
     int a = 2; 
     int s = i < a ? i++ : a++; 

が有効です。この簡略表記を使用する課題がありますか?私は、現時点ではこれを使って考えることができる唯一の方法は次のとおりです。

int acceptReturn = boolCondition ? return toThisPlace() : 0 ; 

私は実際にそのコード行たいもっと見えるように:

有効ではありませんが、私は何である
boolCondition ? return toThisPlace():; 

後に。

+5

賢明ではありません。巧妙なコードは悪いコードです。ここでは探偵小説や論理パズルの本を書いているわけではありません。 *正しい*と*理解しやすい*ときコードは貴重です。より具体的には、*制御フロー*の*計算*および*文*の*式を使用します。あなたはコントロールフローのための式を使用しようとしていますが、それはツールのデザインではなく、それに対して働いています。 –

+4

@EricLippert - 私は、すべてのコードが賢明であるという条件を前提に、C#で書かれたアクション/アドベンチャー小説に取り組んでいます。ページ1: 'IScene OpeningScene = new PanoramicScene(); OpeningScene.panToAction(); 'それは"暗闇の中での私のC# "と呼ばれ、狼男の特徴です。しかし、ポイントに戻って、チップのおかげで。私はそれを念頭に置いておきます。 –

+3

私はその本を読むだろう! –

答えて

14

であなたのステートメントを記述する必要がありますか? :if/elseの "省略形"ではなく、特定のセマンティックルールを持つ特定の演算子(条件付き)です。これらのルールは、式としてではなく、式としてのみ使用できることを意味します。リターンの再

:あなたが唯一の「真の場合に返す」にしたい場合は、そのようにコーディング:

if(condition) return [result]; 

はそれがないものとして、条件演算子を試してみて、使用しないでください。

3

3進演算の外に戻り値を移動する必要があります。

return boolCondition ? toThisPlace() : 0 ; 
+0

私はそれを行うなら、条件が偽であれば0を返しませんか?私は真実ならば戻りたい。 –

+2

その場合、あなたは 'if'を使う必要があります。 'if(boolCondition)toThisPlace();'に戻ります。三項演算子は、if-elseの代わりではありません。 –

2

あなたの発言は順不同です。代わりに

あなたが発見したとして、コンパイルされません、
condition ? return here:return there; 

return condition ? here: there; 
1

あなたはこのよう

return condition ? here : there; 
2

いいえ、それは不可能です。 returnはステートメントです。 ?:の3進数オペレーター(ロジック制御ステートメントではない)の式の一部にすることはできません。その3つのオペランドすべてに期待されます。通常のフォームを使用する必要があります。しかし、これは良いことですが、心配する必要はありません - あなたのコードを長期的に見やすくするでしょう。

2

3進演算子?:はC#で制限されています。あなたは、この場合に行う可能性はある:

return condition ? here : there; 
-2

あなたのコードは大丈夫です唯一の問題は、あなたが条件に変数iを読んでいると、同じ瞬間にあなたがの値を変更しようとしているということです変数

関連する問題