1人のオペレータに複数のオペランドを適用するにはどうすればよいですか?複数のオペランドを1つの演算子に適用する方法は?
例:
代わりの
if (foo == "dog" || foo == "cat" || foo == "human")
私は、次または類似を持つことができます。
if (foo == ("dog" || "cat" || "human"));
1人のオペレータに複数のオペランドを適用するにはどうすればよいですか?複数のオペランドを1つの演算子に適用する方法は?
例:
代わりの
if (foo == "dog" || foo == "cat" || foo == "human")
私は、次または類似を持つことができます。
if (foo == ("dog" || "cat" || "human"));
あなたの最初のバージョンがすでに一つの式に複数の演算子を含んでいます。単一のオペレーター(この場合は==
)に複数のオペランド(「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));
をしかし、私の意見では、あなたが書かれたコードは、他のソリューションすでに読みやすく:
はこのような何かを行うことができます。 もし私たちがここ数十種類のオプションについて話していなければ、当然です。
なぜContainsの代わりにAnyを使用するのですか? –
@JonSkeet:それはリスト
「Contains」を使用する方が簡単です* .NET 2.0との互換性があるよりシンプルなコードを使用してみませんか? –
あなたはいつも、それを試してみるコンパイルして、自分で見ることができます:)
("dog" || "cat" || "human")
はC#
たぶん、あなたがそれらの上に配列し、ループ内でそれらを置くことができるため、意味のある表現ではありません。
また、配列に入れてクールラムダ式を思いついてください。
使用のスイッチケース
switch(foo)
{
case "dog":
case "cat":
case "human":
//Your Code
break;
}
私は、これは単に式をハードコーディングするよりも悪いパフォーマンスを持っている(しかし、おそらくより保守/柔軟性がある) –
@DaveBishすることを、指摘しなければならない:やるだろう、感謝を。 –
@JonSkeet:ありがとう。私は私の質問を改めました。私が比較しているもの(犬、猫、人間)はオペランドですが、 "foo"は何ですか? Operatee? – KMC