Eseguire confronti di stringhe indipendentemente dalle impostazioni culturali
Per impostazione predefinita, il metodo String.Compare esegue confronti sensibili alle impostazioni culturali e alle maiuscole e minuscole. Questo metodo include anche diversi sovraccarichi che forniscono un culture
parametro che consente di specificare la cultura da usare e un comparisonType
parametro che consente di specificare le regole di confronto da usare. La chiamata a questi metodi invece del sovraccarico predefinito elimina qualsiasi ambiguità riguardo alle regole utilizzate in una determinata chiamata al metodo e rende chiaro se un particolare confronto è sensibile alla cultura o insensibile alla cultura.
Nota
Entrambi gli overload del metodo String.CompareTo eseguono confronti sensibili alle impostazioni cultura e alle maiuscole e minuscole; non è possibile utilizzare questo metodo per eseguire confronti non sensibili alle impostazioni cultura. Per maggiore chiarezza nel codice, è consigliabile usare invece il String.Compare metodo .
Per le operazioni sensibili alle impostazioni cultura-specifiche, specificare il StringComparison.CurrentCulture o StringComparison.CurrentCultureIgnoreCase come valore di enumerazione comparisonType
parametro. Se vuoi eseguire un confronto che tenga conto di un contesto culturale diverso da quello corrente, specifica l'oggetto CultureInfo che rappresenta quella cultura come parametro culture
.
I confronti di stringa insensibili alla cultura supportati dal metodo String.Compare sono linguistic (in base alle convenzioni di ordinamento della cultura invariante) o non linguistici (in base al valore ordinale dei caratteri nella stringa). La maggior parte dei confronti di stringhe insensibili alle impostazioni culturali non è linguistica. Per questi confronti, specificare il valore di enumerazione StringComparison.Ordinal o StringComparison.OrdinalIgnoreCase come parametro comparisonType
. Ad esempio, se una decisione di sicurezza (ad esempio un nome utente o un confronto delle password) si basa sul risultato di un confronto tra stringhe, l'operazione deve essere indipendente dalle impostazioni cultura e non linguistica per garantire che il risultato non sia interessato dalle convenzioni di una determinata lingua o cultura.
Usare il confronto di stringhe linguistiche insensibile alla cultura se si desidera gestire stringhe rilevanti in modo coerente da più culture. Ad esempio, se l'applicazione visualizza parole che usano più insiemi di caratteri in un elenco, è possibile visualizzare le parole nello stesso ordine indipendentemente dalle impostazioni culturali correnti. Per confronti linguistici senza distinzione culturale, .NET definisce una cultura invariante basata sulle convenzioni linguistiche dell'inglese. Per eseguire un confronto linguistico indipendente dalla cultura, specificare StringComparison.InvariantCulture o StringComparison.InvariantCultureIgnoreCase come parametro comparisonType
.
L'esempio seguente esegue due confronti di stringhe insensibili alla cultura e non linguistiche. Il primo fa distinzione tra maiuscole e minuscole, ma il secondo no.
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($"{StringComparison.Ordinal} comparison of '{string1}' and '{string2}': {compareResult}");
compareResult = String.Compare(string1, string2,
StringComparison.OrdinalIgnoreCase);
Console.WriteLine($"{StringComparison.OrdinalIgnoreCase} comparison of '{string1}' and '{string2}': {compareResult}");
}
}
// The example displays the following output:
// Ordinal comparison of 'file' and 'FILE': 32
// OrdinalIgnoreCase comparison of 'file' and 'FILE': 0
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
È possibile scaricare le tabelle di ordinamento dei pesi, un set di file di testo che contengono informazioni sui pesi dei caratteri usati nelle operazioni di ordinamento e confronto per i sistemi operativi Windows e la tabella degli elementi delle regole di confronto Unicode predefinite, la tabella sort weight per Linux e macOS.