Provádění změn velikosti písma nezávisle na jazykové verzi
Metody String.ToUpper, String.ToLower, Char.ToUpper a Char.ToLower poskytují přetížení, které nepřijímá žádné parametry. Ve výchozím nastavení tato přetížení bez parametrů provádí změny velikosti písmen na základě hodnoty CultureInfo.CurrentCulture. To vytváří výsledky rozlišující velká a malá písmena, které se mohou lišit podle jazykové verze. Aby bylo jasné, zda chcete, aby změny velikosti písmen byly nezávislé nebo závislé na jazykové verzi, měli byste použít přetížení těchto metod, které vyžaduje, abyste explicitně specifikovali parametr culture. Pro změny velikosti písmen závislé na jazykové verzi specifikujte CultureInfo.CurrentCulture pro parametr culture. Pro změny velikosti písmen nezávislé na jazykové verzi specifikujte CultureInfo.InvariantCulture pro parametr culture.
Často jsou řetězce převedeny na standardní případ, aby později povolily snadnější vyhledávání. Pokud jsou řetězce použity tímto způsobem, měli byste pro parametr culture specifikovat CultureInfo.InvariantCulture, protože hodnota Thread.CurrentCulture může potenciálně měnit mezi dobou, ve které změnila velikost písmen a dobou, kdy došlo k vyhledávání.
Pokud je rozhodnutí zabezpečení založeno na operaci změny velikosti písmen, měla by operace být nezávislá na jazykové verzi, aby zajistila, že výsledek není ovlivněn hodnotou CultureInfo.CurrentCulture. Příklad, který ukazuje, jak operace s řetězci závislé na jazykové verzi mohou vytvořit nekonzistentní výsledky, naleznete v tématu Custom Case Mappings and Sorting Rules
Použití metod String.ToUpper and String.ToLower
Pro srozumitelnost kódu je doporučeno, abyste vždy použili přetížení metod String.ToUpper a String.ToLower, které vám umožňují specifikovat parametr culture explicitně. Například následující kód provádí vyhledání identifikátoru. Operace key.ToLower je ve výchozím nastavení závislá na jazykové verzi, ale toto chování není jasné z č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, aby operace key.ToLower byla nezávislá na jazykové verzi, měli byste změnit předchozí příklad následovně pro explicitní použití CultureInfo.InvariantCulture při změně velikosti písma.
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)];
}
Použití metod Char.ToLower a Char.ToUpper
Přestože metody Char.ToUpper a Char.ToLower mají stejné vlastnosti jako metody String.ToUpper a String.ToLower, tak jediné jazykové verze, kterých se to týká jsou Turečtina (Turecko) a Azerština (latinka, Ázerbájdžán). Zde jsou pouze dvě jazykové verze s rozdíly ve velikosti písmen o jednom znaku. Další podrobnosti o tomto jedinečném mapování velikostí písmen naleznete v tématu Custom Case Mappings and Sorting Rules. Pro srozumitelnost kódu a zajištění konzistentních výsledků je doporučeno, abyste vždy používali přetížení těchto metod, které vám umožňují explicitně specifikovat parametr culture.
Viz také
Odkaz
Další zdroje
Provádění operací s řetězci, které jsou nezávislé na jazykové verzi