Effectuer des changements de casse indépendante de la culture

Les méthodes String.ToUpper, String.ToLower, Char.ToUpper et Char.ToLower fournissent des surcharges qui n’acceptent pas de paramètres. Par défaut, ces surcharges sans paramètres effectuent des changements de casse basés sur la valeur de la CultureInfo.CurrentCulture. Cela produit des résultats de la casse qui peuvent varier selon la culture. Pour indiquer clairement si vous souhaitez que les changements de casse soient ou non dépendants de la culture, vous devez utiliser les surcharges de ces méthodes qui vous demandent de spécifier explicitement un paramètre culture. Pour les changements de casse dépendants de la culture, spécifiez CultureInfo.CurrentCulture pour le paramètre culture. Pour les changements de casse indépendants de la culture, spécifiez CultureInfo.InvariantCulture pour le paramètre culture.

Souvent, les chaînes sont converties en casse standard pour faciliter des recherches ultérieures. Lorsque des chaînes sont utilisées de cette manière, vous devriez spécifier CultureInfo.InvariantCulture pour le paramètre culture, car la valeur de Thread.CurrentCulture peut changer entre le moment où la casse est modifiée et le moment de la recherche.

Si une décision de sécurité est basée sur une opération de changement de casse, cette opération doit être indépendante de la culture pour garantir que le résultat n'est pas affecté par la valeur de CultureInfo.CurrentCulture. Consultez la section « Comparaisons de chaînes qui utilisent la culture actuelle » de l’article Meilleures pratiques d’utilisation des chaînes pour voir un exemple montrant comment les opérations de chaînes dépendantes de la culture peuvent produire des résultats incohérents.

String.ToUpper et String.ToLower

Pour la clarté du code, il est recommandé de toujours utiliser des surcharges des méthodes String.ToUpper et String.ToLower vous permettant de spécifier explicitement une culture. Par exemple, le code suivant effectue une recherche d’identificateur. L’opération key.ToLower est dépendante de la culture par défaut, mais ce comportement ne ressort pas clairement de la lecture du code.

Exemple

Shared Function LookupKey(key As String) As Object
   Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key)
{
    return internalHashtable[key.ToLower()];
}

Si vous souhaitez que l’opération key.ToLower soit indépendante de la culture, changez l’exemple précédent comme suit pour utiliser explicitement CultureInfo.InvariantCulture lors du changement de la casse.

Shared Function LookupKey(key As String) As Object
    Return internalHashtable(key.ToLower(CultureInfo.InvariantCulture))
End Function
static object LookupKey(string key)
{
    return internalHashtable[key.ToLower(CultureInfo.InvariantCulture)];
}

Char.ToUpper et Char.ToLower

Bien que les méthodes Char.ToUpper et Char.ToLower aient les mêmes caractéristiques que les méthodes String.ToUpper et String.ToLower, les seules cultures affectées sont le turc (Türkiye) et l’azéri (latin, Azerbaïdjan). Ce sont les deux seules cultures avec des différences de casse de caractère unique. Pour plus d’informations sur ce mappage de casse unique, consultez la section « Casse » dans la documentation de la classe String. Pour la clarté du code et pour garantir des résultats cohérents, il est recommandé de toujours utiliser les surcharges de ces méthodes qui acceptent un paramètre CultureInfo.

Voir aussi