J'ai
QuestionStrings.Contains(userInput, StringComparer.OrdinalIgnoreCase);
4 Réponses :
Vous pouvez essayer ceci:
QuestionStrings.Contains(userInput.Replace("?","").Trim(), StringComparer.OrdinalIgnoreCase);
Sauf si vous supprimez les points d'interrogation des chaînes dans questions code>, cela ne donnera jamais une réponse correcte ...
au lieu de les ignorer, vous pouvez les supprimer en premier lieu de votre liste et les supprimer de la chaîne d'entrée lors de la comparaison: une autre option, si vous insistez pour conserver le Les points d'interrogation dans la liste, sont d'utiliser tout code> au lieu de
contenant code> - qui vous permettra d'utiliser une expression Lambda pour effectuer la comparaison: P>
QuestionStrings.Any(s => s
.Replace('?', '')
.Equals(userInput.Replace('?', ''), StringComparison.OrdinalIgnoreCase));
Merci beaucoup. Ça a marché. Mais y a-t-il une autre façon de le faire? peut-être une regex? parce que je pourrais avoir besoin d'utiliser cette liste, y compris les points d'interrogation dans une autre classe
J'ai modifié ma réponse pour inclure une autre option qui vous permet de conserver les points d'interrogation dans la liste. Vous pouvez utiliser une expression régulière au lieu de remplacer, mais je ne pense pas que cela fera une grande partie de la différence.
Vous pouvez utiliser ce qui est mentionné ici: https://stackoverflow.com/a/368850/8233385 Le but est d'analyser chaque char de la chaîne afin de ne prendre que des caractères à z p>
S'il vous plaît ne lienez pas à une réponse. Au lieu de cela, résumez le contenu de la réponse ici et assurez-vous de donner une attribution adéquate .
Une approche flexible et expressif du code serait de définir vos exigences avec la liste des expressions régulières (éventuellement stockées dans une table de ressources ou une base de données), puis traduisez les personnes en logique d'exécution directement.
Initialisation: P> >
var match = regexs.Any( x => x.IsMatch( userInput ) );