Kulturális érzéketlen esetmódosítások végrehajtása
A String.ToUpper, String.ToLower, Char.ToUpperés Char.ToLower metódusok olyan túlterheléseket biztosítanak, amelyek nem fogadnak el paramétereket. Alapértelmezés szerint ezek a paraméterek nélküli túlterhelések CultureInfo.CurrentCulturea . Ez olyan kis- és nagybetűkre érzékeny eredményeket eredményez, amelyek kultúránként eltérőek lehetnek. Annak érdekében, hogy egyértelmű legyen, hogy az esetmódosítások kulturális szempontból érzékenyek vagy nem érzékenyek a kultúra szempontjából, a metódusok túlterhelését kell használnia, amelyek megkövetelik, hogy explicit módon adjon meg egy paramétert culture
. A kultúra szempontjából érzékeny kis- és nagybetűk módosításához adja meg CultureInfo.CurrentCulture
a culture
paramétert. A kultúra szempontjából nem érzékeny esetmódosítások esetén adja meg CultureInfo.InvariantCulture
a culture
paramétert.
A sztringek gyakran szabványos esetté alakulnak, hogy később könnyebben lehessen keresni. Ha a sztringek ilyen módon vannak használva, meg kell adnia CultureInfo.InvariantCulture
a culture
paramétert, mert az érték Thread.CurrentCulture változhat az eset módosítása és a keresés időpontja között.
Ha egy biztonsági döntés egy esetmódosítási műveleten alapul, a műveletnek kultúra-érzéketlennek kell lennie annak érdekében, hogy az eredményt ne befolyásolja a művelet értéke CultureInfo.CurrentCulture
. A sztringek használatára vonatkozó ajánlott eljárások című cikk "Sztring-összehasonlítások, amelyek az aktuális kultúrát használják" című szakaszában talál egy példát, amely bemutatja, hogy a kultúraérzékeny sztringműveletek hogyan hozhatnak inkonzisztens eredményeket.
String.ToUpper és String.ToLower
A kód egyértelműsége érdekében ajánlott mindig olyan túlterheléseket és String.ToLower
metódusokat String.ToUpper
használni, amelyek lehetővé teszik a kultúra explicit megadását. Az alábbi kód például egy azonosítókeresést hajt végre. A key.ToLower
művelet alapértelmezés szerint kultúraérzékeny, de ez a viselkedés nem egyértelmű a kód olvasása során.
Példa
Shared Function LookupKey(key As String) As Object
Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key)
{
return internalHashtable[key.ToLower()];
}
Ha azt szeretné, hogy a key.ToLower
művelet kultúra-érzéketlen legyen, módosítsa az előző példát az alábbiak szerint, hogy explicit módon használhassa CultureInfo.InvariantCulture
az eset módosításakor.
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 és Char.ToLower
Bár a módszerek és Char.ToLower
a Char.ToUpper
módszerek jellemzői ugyanazok, mint a String.ToUpper
String.ToLower
módszerek, az egyetlen érintett kultúra a török (Türkiye) és az azerbajdzsáni (latin, azerbajdzsáni). Ez az egyetlen két kultúra, amelyekben egy karakteres burkolatkülönbségek vannak. Az egyedi esetleképezésről további információt az osztálydokumentáció "Casing" szakaszában String talál. A kód egyértelműsége és a konzisztens eredmények biztosítása érdekében javasoljuk, hogy mindig a paramétereket elfogadó CultureInfo metódusok túlterhelését használja.