2017-06-26 5 views
2

Je me demande s'il existe un moyen rapide de comparer un Char à plusieurs Chars. Dans mon code j'ai lu une clé pour Oui ou Non [O/N] puis je vais vérifier si le Char est 'Y' ou 'N'.Comment comparer Chars en C# court chemin

C'est le long chemin:

if(myChar == 'n' || myChar == 'y') 
{ 
.... 

Il a essayé (ne fonctionne pas):

if(myChar == ('n'|'y')) 
{ 
..... 

Quelqu'un peut-il aider?

+1

Je veux dire, si ses seulement deux expressions que je n » Je ne vois pas pourquoi vous auriez besoin d'une main courte. Une alternative serait d'avoir un tableau de "caractères autorisés" et de faire un "Contient()", mais cela semble exagéré pour quelque chose comme ça. – maccettura

+0

Le long chemin est le meilleur moyen dans ce cas, imo. –

Répondre

4

Essayez de regarder dans une collection :

HashSet<char> valid = new HashSet<char>() { 
    'y', 'n', 'N', 'Y', 
}; 

... 

if (valid.Contains(myChar)) { 
    ... 
} 
+1

Pourquoi pas juste une chaîne au lieu d'un Hashset? –

+0

@Kenneth K.: tout à fait raison, 'if (" nNyY ".Contains (myChar))' {...} 'est possible, mais je préfère' HashSet 'pour sa * lisibilité * (nous avons une collection de * caractères valides *, si nous voulons ajouter, dire 'T'' t' pour vrai, nous savons quoi faire) –

+1

@GiladGreen D'accord, mais O (1) pour 4 caractères ne va pas avoir beaucoup d'impact. –

2

Lorsque la liste des caractères est courte, utilisez Contains méthode de string:

if ("yn".Contains(myChar)) { 
    ... 
} 
+1

Notez, ce sera une comparaison sensible à la casse. Vous devrez faire '" YyNn ".Contains (myChar)' ou utiliser '" yn ".IndexOf (myChar, StringComparison.OrdinalIgnoreCase)> = 0)' –

+0

@ScottChamberlain Ceci est absolument vrai, si OP nécessite une comparaison insensible à la casse , il aurait besoin de faire l'une des méthodes que vous avez décrites. – dasblinkenlight