5

IF ステートメントの OR 演算子とは

私はいつこの質問をしたか、そして(非常に役立つ)答えを得たとき、あなたが言うことができるはずだと思っif (title == "User greeting" || "User name") {do stuff}た. それがうまくいかない理由が明らかでない場合は、他の質問とその受け入れられた回答を参照してください。

ただし、文字列の任意のリストを指定して、何かがそれらのいずれかと等しいかどうかを確認する方法があるかどうか疑問に思っています。みたいなif(Array.OR(title, { "User greeting", "User name" })) continue;事があるのか​​、暗所で撮ってるの?実装するのはかなり簡単なようです。

4

4 に答える 4

3

CorrugatedAir の例は非常に優れていますが、必要に応じてインラインで含めることができます。

if (new string[] { "test1", "test2", "test3" }.Contains("test1")) Console.WriteLine("it works");

そしてそれはうまくいきます:http: //ideone.com/QzbvKV(Sonerに感謝)

したがって、私のコードは次のようになります。if (new string[] { "User greeting", "User name" }.Contains(title)) Console.WriteLine("title contained");

http://ideone.com/PYugJu

PS リンクを提供してくれた Soner に感謝します。ideone について聞いたことがありません。

于 2013-02-20T20:21:52.117 に答える
2

文字列比較を尊重する、より包括的で柔軟なソリューション:

using System;
using System.Collections.Generic;
using System.Linq;

public static class StringExtensions
{
    public static bool EqualsAny(this string target, StringComparer comparer, params string[] values)
    {
        return target.EqualsAny(comparer, (IEnumerable<string>) values);
    }

    public static bool EqualsAny(this string target, params string[] values)
    {
        return target.EqualsAny((IEnumerable<string>)values);
    }

    public static bool EqualsAny(this string target, StringComparer comparer, IEnumerable<string> values)
    {
        return values.Contains(target, comparer);
    }

    public static bool EqualsAny(this string target, IEnumerable<string> values)
    {
        return values.Contains(target, StringComparer.OrdinalIgnoreCase);
    }
}

使用法:

if (title.EqualsAny("User greeting", "User name"))
{
    //do stuff
}

PS @Servy の言葉を繰り返します: このようなソリューションは、値の小さなセットに対してはうまく機能します。大きなセットについては、Dictionary、HashSet などの使用を検討してください。

于 2016-12-12T10:28:19.053 に答える
1

この状況ではEnumerable.Contains()メソッドを使用できます。このメソッドのプラス面は、一致する要素が見つかるとすぐに列挙が終了することです。

既定の等値比較子を使用して、指定された要素がシーケンスに含まれているかどうかを判断します。

string[] fruits = { "apple", "banana", "mango", "orange", "passionfruit", "grape" };
string fruit = "mango";
bool hasMango = fruits.Contains(fruit);

ここにデモがあります。

System.Linq名前空間を追加することを忘れないでください。

于 2013-02-20T19:59:19.170 に答える