複数のオペランドを単一の演算子に適用する方法は?
例:
それ以外の
if (foo == "dog" || foo == "cat" || foo == "human")
私は次のようなものを持つことができます:
if (foo == ("dog" || "cat" || "human"));
最初のバージョンでは、1つの式に複数の演算子がすでに含まれています。複数のオペランド( "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 ));
しかし、私の意見では、あなたが書いたコードは、他のどのソリューションよりもすでに読みやすくなっています。ここで考えられる数十のオプションについて話していなければ、当然です。
スイッチケースを使用
switch(foo)
{
case "dog":
case "cat":
case "human":
//Your Code
break;
}
いつでも試して、コンパイルして、自分で確認できます:)
("dog" || "cat" || "human")
は C# にとって意味のある式ではありません
たぶん、それらを配列に入れてループすることができます。
または、それらを配列に入れて、クールなラムダ式を考え出してください。