Confronto di stringhe multiple con C #

Diciamo che ho bisogno di confrontare se stringa x è “A”, “B” o “C”.

Con Python, posso usare l’operatore per controllarlo facilmente.

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

Con C #, posso fare

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

Può essere qualcosa di più simile a Python?

AGGIUNTO

Avevo bisogno di aggiungere System.Linq per usare Case System.Linq Insensitive ().

 using System; using System.Linq; using System.Collections.Generic; class Hello { public static void Main() { var x = "A"; var strings = new List {"a", "B", "C"}; if (strings.Contains(x, StringComparer.OrdinalIgnoreCase)) { Console.WriteLine("hello"); } } } 

o

 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"); } } } 

Utilizzare Enumerable.Contains che è un metodo di estensione su IEnumerable :

 var strings = new List { "A", "B", "C" }; string x = // some string bool contains = strings.Contains(x, StringComparer.OrdinalIgnoreCase); if(contains) { // do something } 
 if ((new[]{"A","B","C"}).Contains(x, StringComparer.OrdinalIgnoreCase)) 

Perché sì, c’è un thread classico qui su StackOverflow con un metodo di estensione che farebbe esattamente quello che stai cercando.

Un uso per i metodi di estensione

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

EDIT in risposta al commento qui sotto: Se ti occupi solo di stringhe, allora:

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

Il che porta alla syntax con cui hai familiarità:

 if(x.In("A","B","C")) { // do something.... } 

Nota, questo è praticamente lo stesso come tutti gli altri hanno pubblicato solo in una syntax più vicina a ciò che hai menzionato.

 List possibleMatches = new List{"A", "B", "C"}; possibleMatches.Contains(inputString); 

Sicuro

 var lst = new List() { "A", "B", "C" }; if (lst.Contains(x, StringComparer.OrdinalIgnoreCase) { // do something } 

Probabilmente la vostra migliore scommessa sarebbe l’istruzione Select Case (switch in C #) .

Modifica: Scusa Selezionare Caso è VB.NET (la mia solita lingua) ed è passare in C #.

Ci sono un paio di approcci a questo, ti suggerirei di fare qualcosa come:

  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 } } 

Ci sono molti altri modi per gestirlo, e più grande diventa il tuo campo di ricerca, più è probabile che l’utilizzo di un array, di un hashtable o di una raccolta diventi valutabile. Finché il tuo campo di possibilità rimane piccolo, l’uso di una semplice stringa sarà la tua migliore prestazione. Tutto il sovraccarico di matrici o oggetti più complessi (o matrici di oggetti …) non è necessario.