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.

Zobacz też