2009-09-08 8 views
9

メソッドで次のコード行が動作しないのはなぜですか?C#でリターンとショートハンドを使用する場合

return (count > 0) ? true : false; 

私がしなければそれは完全に正常に動作します:

bool ret = (count > 0) ? true : false; 
return ret; 

ボーナス質問:文の場合、それは本当に速くなったり、より効果的な標準よりか?

bool ret = false; 
if(count > 0) 
    ret = true; 
return ret; 

どちらをお勧めしますか?

+1

コンパイル時にエラーが発生しないと思いますが、メソッドが間違った値を返すだけですか? – ChrisF

+0

コンパイル時エラーです...構文にエラーがありました。 –

+0

3次演算子で頻繁に発生することは、最初の結果(count> 0)の評価が関数が使用する戻り値を決定することです。あなたの関数はboolを返すと仮定します。
私は(count> 0)の値を確認しようとします。これが問題ならば、文全体を大文字にする必要があります。
return(bool)((count> 0)?true:false); それは私が他の場所で見ている奇妙なことです。 bool ret; if (count > 0) { ret = true; } else { ret = false } return ret; しかし、私はいつも三次オペレータは「C」言語:) – KevinDTimm

答えて

38

私が推薦する:

return count > 0; 

明示的trueまたはfalseを返す必要はありません。

あなたのコンパイルエラーは私に興味をそそられています。一見、それはうまくいくように見えます。コンパイルに失敗した短い完全な例を投稿できますか?その条件式の型は問題ありませんboolでなければなりません。私の推測では、あなたはもっと複雑なシナリオを持っており、実際の問題を取り除いた例を簡略化することによってです。

ボーナスの質問については、どちらが速いのか分からず、99.99%のケースで気にしません。私はになります。何らかの理由でインライン展開が禁止されていない限り、大きな遅延が発生していることがわかりました。可読解決方法 - 簡単な返信文、IMOです。

+1

のより完全なGROKを示したことを考えた:第三変化と同じようにも –

+0

ありがとうJon、問題は気づかなかったシンプルな構文エラーでした(通常、あなたが何が間違っているかを尋ねた後まで)。私はこの答えが好きです、それはさらに短くなりました!戻りカウント> 0; –

+1

あなたはいつも私にそれを打つ... –

10

この試してみてください。リターンは式count> 0を返す前に

return count > 0; 

が評価され、trueまたはfalseを与えています。

これも動作するはずです:

return (count > 0 ? true : false); 

が、私はあなたがこれをしなかったお勧めします。

私はいつも水平動作量を低く抑えようとしていますが、コードを読みやすくすると思います。

ただ単に混乱させます:)

return count > 0 ? false : true; 
1

を、これは

return (count > 0 ? true : false); 

を働くあなたは、それがtrueとfalse以外の値を返すことができます以下のシナリオを想像してみてください。あなたの特別な場合、私は他の提案のようにします。戻りカウント> 0; C#

return count > 0; 

の観点から

5

はそれのreadabiltyためのより良いです。

しかし、コンパイラはコードをoptmizeするので、3つのオプションは実際にコンパイルされても同じです。確認するためにILコードを見てみることができます!

関連する問題