Sdílet prostřednictvím


Provádění porovnání řětězců nezávisle na jazykové verzi

Ve výchozím nastavení provádí metoda String.Compare porovnání závislé na jazykové verzi a rozlišující velká a malá písmena. Tato metoda zahrnuje také několik přetížení, která poskytují parametr culture umožňující zadat jazykovou verzi, která má být použita, a parametr comparisonType, který umožňuje určit použitá pravidla porovnávání. Volání těchto metod místo výchozího přetížení odstraní jakoukoli nejednoznačnost týkající se pravidel používaných při volání konkrétní metody a objasňuje, zda je konkrétní srovnání citlivé na jazykovou verzi nebo ne.

PoznámkaPoznámka

Obě přetížení metody String.CompareTo provádějí porovnání citlivé na jazykovou verzi a velká a malá písmena; tuto metodu nelze použít ke srovnáním náročným na jazykovou verzi.Pro přehlednost kódu, doporučujeme použít raději metodu String.Compare.

V případě operací závislých na jazykové verzi určete hodnotu výčtu StringComparison.CurrentCulture nebo StringComparison.CurrentCultureIgnoreCase jako parametr comparisonType. Pokud chcete provádět srovnání citlivé na jazykovou verzi pomocí určené jazykové verze jiné, než současně používané, určete objekt CultureInfo, který reprezentuje tuto jazykovou verzi jako parametr culture .

Porovnávání řetězců nezávisle na jazykových verzích podporované metodouString.Compare jsou buď jazykové (založené na konvence řazení invariantní jazykové verze) nebo nejazykové (založené na pořadovém čísle znaků v řetězci). Většina srovnání řetězců bez ohledu na jazykovou verzi je mimo jazykových. Pro tato srovnání zadejte hodnotu výčtu StringComparison.Ordinal nebo StringComparison.OrdinalIgnoreCase jako parametr comparisonType. Například pokud je bezpečnostní rozhodnutí (například porovnání uživatelského jména a hesla) založeno na výsledku porovnání řetězců, operace by měla být nezávislá na jazykové verzi a jazyce, aby výsledek nemohl být ovlivněn konvencemi určité jazykové kultury nebo jazyka. (Příklad toho, jak porovnání řetězců závislé na jazykové verzi může způsobit nekonzistentní výsledky, naleznete v tématuVlastní případy mapování a pravidla řazení.)

Použijte srovnání lingvistických řetězců nezávislých na jazykové verzi, pokud chcete zpracovat jazykově odpovídající řetězce z několika jazykových verzí konzistentním způsobem. Například pokud vaše aplikace zobrazuje slova, která používají více znakových sad v seznamu, může být vhodné zobrazit slova ve stejném pořadí bez ohledu na aktuální jazykovou verzi. Pro jazyková srovnání nezávislá na jazykových verzích definuje rozhraní .NET Framework neutrální jazykovou verzi, která bude založena na jazykových konvencích angličtiny. Pro provádění lingvistického srovnání nezávislého na jazykové verzi upřesněte StringComparison.InvariantCulture nebo StringComparison.InvariantCultureIgnoreCase jako parametr comparisonType.

Následující příklad provádí dvě srovnání nejazykových řetězců nezávisle na jazykové verzi. U prvního záleží na velikosti písma, u druhého nikoli.

Public Class CompareSample
    Public Shared Sub Main()
        Dim string1 As String = "file"
        Dim string2 As String = "FILE"
        Dim compareResult As Integer

        compareResult = String.Compare(string1, string2, _
                                       StringComparison.Ordinal)   
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.Ordinal, string1, string2, 
                          compareResult) 

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.OrdinalIgnoreCase)
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.OrdinalIgnoreCase, string1, string2, 
                          compareResult) 
    End Sub
End Class
' The example displays the following output:
'    Ordinal comparison of 'file' and 'FILE': 32
'    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0
using System;

public class CompareSample
{
    public static void Main()
    {
        string string1 = "file";
        string string2 = "FILE";
        int compareResult = 0;

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.Ordinal);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.Ordinal, string1, string2, 
                          compareResult); 

        compareResult = String.Compare(string1, string2, 
                                       StringComparison.OrdinalIgnoreCase);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}", 
                          StringComparison.OrdinalIgnoreCase, string1, string2, 
                          compareResult); 
    }
}
// The example displays the following output:
//    Ordinal comparison of 'file' and 'FILE': 32
//    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0

Viz také

Odkaz

String.Compare

String.CompareTo

Koncepty

Porovnání a řazení dat pro konkrétní jazykovou verzi

Doporučené postupy pro použití řetězců v rozhraní .NET Framework

Další zdroje

Provádění operací s řetězci, které jsou nezávislé na jazykové verzi

Historie změn

Datum

Historie

Důvod

Květen 2010

Revidován, aby odrážel osvědčené postupy pro manipulaci s řetězci.

Oprava chyby obsahu