Dela via


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.

Se även