1

文字列の短いリストに特定の文字列が含まれているかどうかをテストしたいと考えています。現在、コードは次のようになっています。

if (new List<string> { "A", "B", "C" }.Contains (str)) {

しかし、これは肥大化しているようです。たとえば、Java では iirc を簡単に記述できますが、{"A", "B", "C"}.Contains(str)これは上記よりもはるかに望ましいものです。

C#にはもっと良い方法があると確信しています。指摘していただけますか?

4

5 に答える 5

6

拡張メソッドを書くことができます:

public static bool In<T>(this T obj, params T[] candidates)
{
    return obj.In((IEnumerable<T>)candidates);
}

public static bool In<T>(this T obj, IEnumerable<T> candidates)
{
    if(obj == null) throw new ArgumentNullException("obj");
    return (candidates ?? Enumerable.Empty<T>()).Contains(obj);
}

次に、これを使用して次のことを行うことができます。

if(str.In("A", "B", "C")) { ... }
于 2009-08-27T08:53:19.173 に答える
6

次のように短縮できると思います。

if ((new []{ "A", "B", "C" }).Contains (str)) {

ただし、実際にどれだけの違いが生じるかはわかりません。

更新:正確に1文字をテストすることがわかっている場合、そのリストまたは配列を作成する理由はありません:

if ("ABC".Contains(str)) {

そのコードは短くて高速です。しかし、やはり一文字の文字列は単なる見本だったのだと思います...

于 2009-08-27T08:07:35.427 に答える
2

完全に変更するには:

switch(str){
    case "A":
    case "B":
    case "C":
       contains = true;
       break;

    default:
       contains = false;
       break;
}
于 2009-08-27T08:28:21.190 に答える
2

このアプローチはどうですか:

"A;B;C".Split(';').Contains(str);
于 2009-08-27T08:09:32.960 に答える