2012-04-27 16 views

答えて

9

あなたの最初のバージョンがすでに一つの式に複数の演算子を含んでいます。単一のオペレーター(この場合は==)に複数のオペランド(「dog」、「cat」、「human」)を適用するように思えます。

// Note: could extract this array (or make it a set etc) and reuse the same 
// collection each time we evaluate this. 
if (new[] { "dog", "cat", "human" }.Contains(foo)) 

をしかし、何の一般的なフリーサイズすべての演算子のために、このバージョンではありません。

について具体的な例あなたが使用できること。

編集:コメントに記載されているとおり、上記のコードはハードコードされたバージョンと同様に機能しません。

List<string> values = new List<string> {"dog", "cat", "human"}; 
values.Any(s=>s.Equals(foo)); 

をしかし、私の意見では、あなたが書かれたコードは、他のソリューションすでに読みやすく:

+0

私は、これは単に式をハードコーディングするよりも悪いパフォーマンスを持っている(しかし、おそらくより保守/柔軟性がある) –

+0

@DaveBishすることを、指摘しなければならない:やるだろう、感謝を。 –

+0

@JonSkeet:ありがとう。私は私の質問を改めました。私が比較しているもの(犬、猫、人間)はオペランドですが、 "foo"は何ですか? Operatee? – KMC

1

はこのような何かを行うことができます。 もし私たちがここ数十種類のオプションについて話していなければ、当然です。

+0

なぜContainsの代わりにAnyを使用するのですか? –

+0

@JonSkeet:それはリストに違いがありますか? – Tigran

+0

「Contains」を使用する方が簡単です* .NET 2.0との互換性があるよりシンプルなコードを使用してみませんか? –

0

あなたはいつも、それを試してみるコンパイルして、自分で見ることができます:)

("dog" || "cat" || "human") 

はC#

たぶん、あなたがそれらの上に配列し、ループ内でそれらを置くことができるため、意味のある表現ではありません。

また、配列に入れてクールラムダ式を思いついてください。

1

使用のスイッチケース

switch(foo) 
{ 
    case "dog": 
    case "cat": 
    case "human": 
    //Your Code 
    break; 
} 
関連する問題