Utföra kulturokänsliga skiftlägesändringar
Metoderna String.ToUpper, String.ToLower, Char.ToUpperoch Char.ToLower ger överlagringar som inte accepterar några parametrar. Som standard utför dessa överlagringar utan parametrar skiftlägesändringar baserat på värdet för CultureInfo.CurrentCulture. Detta ger skiftlägeskänsliga resultat som kan variera beroende på kultur. För att klargöra om du vill att skiftlägesändringar ska vara kulturkänsliga eller kulturokänsliga bör du använda överlagringarna av dessa metoder som kräver att du uttryckligen anger en culture
parameter. För kulturkänsliga skiftlägesändringar anger du CultureInfo.CurrentCulture
för parametern culture
. För kulturokänsliga skiftlägesändringar anger du CultureInfo.InvariantCulture
för parametern culture
.
Ofta konverteras strängar till ett standardfall för att möjliggöra enklare sökning senare. När strängar används på det här sättet bör du ange CultureInfo.InvariantCulture
för parametern culture
eftersom värdet Thread.CurrentCulture för potentiellt kan ändras mellan tiden då ärendet ändras och tiden då sökningen inträffar.
Om ett säkerhetsbeslut baseras på en ärendeändringsåtgärd bör åtgärden vara kulturokänslig för att säkerställa att resultatet inte påverkas av värdet för CultureInfo.CurrentCulture
. Se avsnittet "Strängjämförelser som använder den aktuella kulturen" i artikeln Metodtips för att använda strängar för ett exempel som visar hur kulturkänsliga strängåtgärder kan ge inkonsekventa resultat.
String.ToUpper och String.ToLower
För tydlighetens skull rekommenderar vi att du alltid använder överlagringar av metoderna String.ToUpper
och String.ToLower
som gör att du uttryckligen kan ange en kultur. Följande kod utför till exempel en identifierarsökning. Åtgärden key.ToLower
är kulturkänslig som standard, men det här beteendet är inte klart från att läsa koden.
Exempel
Shared Function LookupKey(key As String) As Object
Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key)
{
return internalHashtable[key.ToLower()];
}
Om du vill key.ToLower
att åtgärden ska vara kulturokänslig ändrar du föregående exempel så här för att uttryckligen använda CultureInfo.InvariantCulture
när du ändrar ärendet.
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 och Char.ToLower
Char.ToUpper
Även om metoderna och Char.ToLower
har samma egenskaper som String.ToUpper
metoderna ochString.ToLower
, är de enda kulturer som påverkas turkiska (Türkiye) och Azerbajdzjan (latinska, Azerbajdzjan). Det här är de enda två kulturerna med höljeskillnader med en tecken. Mer information om den här unika ärendemappningen finns i avsnittet "Hölje" i klassdokumentationen String . För tydlighetens kod och för att säkerställa konsekventa resultat rekommenderar vi att du alltid använder överlagringarna av dessa metoder som accepterar en CultureInfo parameter.