Wykonywanie zmian wielkości liter bez uwzględniania kultury
Metody String.ToUpper, String.ToLower, Char.ToUpperi Char.ToLower zapewniają przeciążenia, które nie akceptują żadnych parametrów. Domyślnie te przeciążenia bez parametrów wykonują zmiany wielkości liter na podstawie wartości CultureInfo.CurrentCulture. Powoduje to wygenerowanie wyników z uwzględnieniem wielkości liter, które mogą się różnić w zależności od kultury. Aby wyjaśnić, czy zmiany wielkości liter mają być wrażliwe na kulturę, czy niewrażliwe na kulturę, należy użyć przeciążeń tych metod, które wymagają jawnego określenia parametru culture
. W przypadku zmian wielkości liter z uwzględnieniem kultury określ CultureInfo.CurrentCulture
parametr culture
. W przypadku zmian wielkości liter bez uwzględniania culture
kultury określ CultureInfo.InvariantCulture
parametr .
Często ciągi są konwertowane na standardowy przypadek, aby umożliwić łatwiejsze wyszukiwanie później. Gdy ciągi są używane w ten sposób, należy określić CultureInfo.InvariantCulture
parametr culture
, ponieważ wartość Thread.CurrentCulture może potencjalnie ulec zmianie między czasem zmiany przypadku a czasem wystąpienia wyszukiwania.
Jeśli decyzja dotycząca zabezpieczeń jest oparta na operacji zmiany przypadku, operacja powinna być niewrażliwa na kulturę, aby upewnić się, że wynik nie ma wpływu na wartość CultureInfo.CurrentCulture
. Zobacz sekcję "Porównanie ciągów, które używają bieżącej kultury" w artykule Best Practices for Using Strings (Najlepsze rozwiązania dotyczące używania ciągów ), aby zapoznać się z przykładem, w jaki sposób operacje ciągów wrażliwych na kulturę mogą generować niespójne wyniki.
String.ToUpper i String.ToLower
W celu zapewnienia przejrzystości kodu zaleca się, aby zawsze używać przeciążeń String.ToUpper
metod i String.ToLower
, które umożliwiają jawne określenie kultury. Na przykład poniższy kod wykonuje wyszukiwanie identyfikatorów. Operacja key.ToLower
jest domyślnie wrażliwa na kulturę, ale to zachowanie nie jest jasne podczas odczytywania kodu.
Przykład
Shared Function LookupKey(key As String) As Object
Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key)
{
return internalHashtable[key.ToLower()];
}
Jeśli operacja key.ToLower
ma być niewrażliwa na kulturę, zmień powyższy przykład w następujący sposób, aby jawnie użyć CultureInfo.InvariantCulture
podczas zmiany przypadku.
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 i Char.ToLower
Char.ToUpper
Chociaż metody i Char.ToLower
mają takie same cechy jak String.ToUpper
metody iString.ToLower
, jedynymi kulturami, których dotyczy problem, są tureckie (Türkiye) i Azerbejdżan (Łaciński, Azerbejdżan). Są to jedyne dwie kultury z różnicami wielkości liter jednoznaków. Aby uzyskać więcej informacji na temat tego unikatowego mapowania wielkości liter, zobacz sekcję "Casing" w String dokumentacji klasy. W przypadku jasności kodu i zapewnienia spójnych wyników zaleca się, aby zawsze używać przeciążeń tych metod, które akceptują CultureInfo parametr.