11
votes

Les opérations de chaîne sont-elles sensibles à la cordon?

sont des fonctions de chaîne .net comme indexof ("bla") sensible à la casse?

D'après ce que je me souviens, ils ne sont pas, mais pour une raison quelconque, je vois des bugs dans mon application où le texte de la chaîne de requête est dans un étui à chameau (comme UserID) et je teste pour indexof (" userid ") .


0 commentaires

4 Réponses :


21
votes

Oui, les fonctions de chaîne sont sensibles à la casse par défaut. Ils ont généralement une surcharge qui vous permet d'indiquer le type de comparaison de chaîne souhaitée. Ceci est également vrai pour l'indexof. Pour obtenir l'index de votre chaîne, de manière insensible à la casse, vous pouvez faire:

string blaBlah = "blaBlah";
int idx = blaBlah.IndexOf("blah", StringComparison.OrdinalIgnoreCase);


2 commentaires

C # est strictement sensible à la casse, mais dans VB.net, vous pouvez utiliser l'option Comparer le texte pour forcer une comparaison non sensible à la casse. La valeur par défaut dans vb.net est binaire afin qu'il se comporte comme c #.


Même dans ce cas, option Comparer ne s'applique qu'aux opérateurs de comparaison VB tels que = et comme - il n'affectera aucune méthode de String < / code>, ni aucune autre fonction de chaîne FCL.



1
votes

Les comparaisons de chaîne .NET sont en effet sensibles à la casse. Vous pouvez utiliser des choses comme Toupper () pour normaliser les choses avant de les comparer.


3 commentaires

Une autre option serait: cultureInfo.currentculture.compareinfo.indexof (source, valeur, compareroption.ignorecase)


Faites attention aux cultures, ou vous pourriez constater soudainement la comparaison qui ne fonctionne pas sur un système turc - en Turc, je les majuscules à ©.


L'utilisation d'une mauvaise idée ou de tolower est une mauvaise idée, car elle nécessiterait une initialisation d'un nouvel objet (mauvais pour la performance) Toutes les méthodes de comparaison des chaînes prennent une argument StringComparison ou un argument d'IComparer dans l'une des surcharges en utilisant l'un de ceux-ci effectuera l'utilisation de Toupper / Baisser



0
votes

Comme défaut, ils sont sensibles à la casse, mais la plupart d'entre eux (sinon toutes), y compris l'index de l'indice, ont une surcharge qui prend un argument StringComparison. Par exemple. Si vous passez

StringComparison.InvariantCultureIgnoreCase 


0 commentaires

11
votes

Une chose que j'aimerais ajouter aux réponses existantes (puisque vous étiez à l'origine em> demandant à propos de ASP.NET):

Certaines collections de noms / valeur, telles que la demande.Quiserysching et Probablement aussi demande.form ne sont pas sensibles à la casse. Par exemple, si je navigue sur une page ASPX à l'aide de l'URL suivante P>

var user1 = Request.QueryString["user"];
var user2 = Request.QueryString["USER"];


0 commentaires