Sdílet prostřednictvím


Provádění změn nerozlišující malá a velká písmena jazykové verze

, String.ToUpperString.ToLower, Char.ToUppera Char.ToLower metody poskytují přetížení, které nepřijímají žádné parametry. Ve výchozím nastavení tyto přetížení bez parametrů provádějí změny případu na základě hodnoty CultureInfo.CurrentCulture. Výsledkem jsou výsledky citlivé na malá a velká písmena, které se můžou lišit podle jazykové verze. Chcete-li zjistit, zda chcete, aby změny malých a velkých písmen byly citlivé na jazykovou verzi nebo nerozlišují jazykové verze, měli byste použít přetížení těchto metod, které vyžadují explicitní zadání parametru culture . U změn velkých písmen v jazykové verzi zadejte CultureInfo.CurrentCulture parametr culture . U změn nerozlišující malá písmena jazykové verze zadejte CultureInfo.InvariantCulture parametr culture .

Řetězce se často převedou na standardní případ, aby bylo možné snadněji vyhledávat později. Pokud se řetězce používají tímto způsobem, měli byste pro culture parametr zadatCultureInfo.InvariantCulture, protože hodnota Thread.CurrentCulture může potenciálně změnit mezi časem změny případu a časem výskytu vyhledávání.

Pokud je bezpečnostní rozhodnutí založeno na operaci změny případu, měla by být operace nerozlišující jazykovou verzi, aby se zajistilo, že výsledek nebude ovlivněn hodnotou CultureInfo.CurrentCulture. Podívejte se na část Porovnání řetězců, která používají aktuální jazykovou verzi , v článku Osvědčené postupy pro používání řetězců , kde je příklad ukazující, jak operace řetězců citlivé na jazykovou verzi můžou vést k nekonzistentním výsledkům.

String.ToUpper a String.ToLower

Pro srozumitelnost kódu se doporučuje vždy používat přetížení String.ToUpper a String.ToLower metody, které umožňují explicitně zadat jazykovou verzi. Například následující kód provede vyhledávání identifikátoru. Operace key.ToLower je ve výchozím nastavení citlivá na jazykovou verzi, ale toto chování není jasné ze čtení kódu.

Příklad

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

Pokud chcete, key.ToLower aby operace nerozlišovat jazykovou verzi, změňte předchozí příklad následujícím způsobem, aby se explicitně použil CultureInfo.InvariantCulture při změně případu.

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 a Char.ToLower

I když a Char.ToUpperChar.ToLower metody mají stejné charakteristiky jako String.ToUpper a String.ToLower metody, jediné kultury, které jsou ovlivněny, jsou turečtina (Türkiye) a Ázerbájdžánština (latinka, Ázerbájdžán). Jedná se o jediné dvě jazykové verze s rozdíly jednoznakových velikostí. Další podrobnosti o tomto jedinečném mapování případů najdete v části Casing v String dokumentaci ke třídě. Pro přehlednost kódu a zajištění konzistentních výsledků doporučujeme vždy používat přetížení těchto metod, které přijímají CultureInfo parametr.

Viz také