Alex Rivera | Logout

Multiple string comparison with C#

Asked 2011-05-17T17:09:29.053
36

Let's say I need to compare if string x is "A", "B", or "C".

With Python, I can use in operator to check this easily.

if x in ["A","B","C"]:
    do something

With C#, I can do

if (String.Compare(x, "A", StringComparison.OrdinalIgnoreCase) || ...)
    do something

Can it be something more similar to Python?

ADDED

I needed to add System.Linq in order to use case insensitive Contain().

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

class Hello {
    public static void Main() {
        var x = "A";

        var strings = new List<string> {"a", "B", "C"};
        if (strings.Contains(x, StringComparer.OrdinalIgnoreCase)) {
            Console.WriteLine("hello");
        }
    }
}

or

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

static class Hello {
    public static bool In(this string source, params string[] list)
    {
        if (null == source) throw new ArgumentNullException("source");
        return list.Contains(source, StringComparer.OrdinalIgnoreCase);
    }

    public static void Main() {
        string x = "A";

        if (x.In("a", "B", "C")) {
            Console.WriteLine("hello");
        }
    }
}
Edit
Report

2 Answers

46

Use Enumerable.Contains<T> which is an extension method on IEnumerable<T>:

var strings = new List<string> { "A", "B", "C" };
string x = // some string
bool contains = strings.Contains(x, StringComparer.OrdinalIgnoreCase);
if(contains) {
    // do something
}
answered 2011-05-17T17:12:11.497
-2

There are a couple of approaches to this, I would suggest you do something like:

 private const string _searched = "A|B|C|";
 private void button1_Click(object sender, EventArgs e)
 {
     string search = "B" + "|";
     if (_searched.IndexOf(search) > -1)
     {
         //do something
     }
 }

There are a lot of other ways to handle this, and the larger your search field gets, the more likely using an array, hashtable or collection becomes valueable. As long as your field of possibilities remains small, the use of a simple string is going to be your best performance. All of the overhead of more complex arrays or objects (or arrays of objects...) is unnecessary.

answered 2011-05-17T17:14:39.473

Your Answer