Megosztás a következőn keresztül:


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.ToUpperString.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.

Lásd még