Leggere in inglese

Condividi tramite


String.GetHashCode Metodo

Definizione

Overload

GetHashCode(ReadOnlySpan<Char>, StringComparison)

Restituisce il codice hash per l'intervallo di caratteri di sola lettura specificato usando le regole specificate.

GetHashCode(StringComparison)

Restituisce il codice hash per questa stringa usando le regole specificate.

GetHashCode(ReadOnlySpan<Char>)

Restituisce il codice hash per l'intervallo di caratteri di sola lettura specificato.

GetHashCode()

Restituisce il codice hash di questa stringa.

GetHashCode(ReadOnlySpan<Char>, StringComparison)

Origine:
String.Comparison.cs
Origine:
String.Comparison.cs
Origine:
String.Comparison.cs

Restituisce il codice hash per l'intervallo di caratteri di sola lettura specificato usando le regole specificate.

C#
public static int GetHashCode (ReadOnlySpan<char> value, StringComparison comparisonType);

Parametri

value
ReadOnlySpan<Char>

Intervallo di caratteri di sola lettura.

comparisonType
StringComparison

Uno dei valori di enumerazione che specifica le regole da usare per il confronto.

Restituisce

Codice hash di un intero con segno a 32 bit.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9

GetHashCode(StringComparison)

Origine:
String.Comparison.cs
Origine:
String.Comparison.cs
Origine:
String.Comparison.cs

Restituisce il codice hash per questa stringa usando le regole specificate.

C#
public int GetHashCode (StringComparison comparisonType);

Parametri

comparisonType
StringComparison

Uno dei valori di enumerazione che specifica le regole da usare per il confronto.

Restituisce

Codice hash di un intero con segno a 32 bit.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

GetHashCode(ReadOnlySpan<Char>)

Origine:
String.Comparison.cs
Origine:
String.Comparison.cs
Origine:
String.Comparison.cs

Restituisce il codice hash per l'intervallo di caratteri di sola lettura specificato.

C#
public static int GetHashCode (ReadOnlySpan<char> value);

Parametri

value
ReadOnlySpan<Char>

Intervallo di caratteri di sola lettura.

Restituisce

Codice hash di un intero con segno a 32 bit.

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 3.0, Core 3.1, 5, 6, 7, 8, 9

GetHashCode()

Origine:
String.Comparison.cs
Origine:
String.Comparison.cs
Origine:
String.Comparison.cs

Restituisce il codice hash di questa stringa.

C#
public override int GetHashCode ();

Restituisce

Codice hash di un intero con segno a 32 bit.

Esempio

Nell'esempio seguente viene illustrato il GetHashCode metodo usando varie stringhe di input.

C#
using System;

class GetHashCode 
{
    public static void Main() 
    {
        DisplayHashCode( "" );
        DisplayHashCode( "a" );
        DisplayHashCode( "ab" );
        DisplayHashCode( "abc" );
        DisplayHashCode( "abd" );
        DisplayHashCode( "abe" );
        DisplayHashCode( "abcdef" );
        DisplayHashCode( "abcdeg" );
        DisplayHashCode( "abcdeh" );
        DisplayHashCode( "abcdei" );
        DisplayHashCode( "Abcdeg" );
        DisplayHashCode( "Abcdeh" );
        DisplayHashCode( "Abcdei" );
    }

    static void DisplayHashCode( String Operand )
    {
        int     HashCode = Operand.GetHashCode( );
        Console.WriteLine("The hash code for \"{0}\" is: 0x{1:X8}, {1}",
                          Operand, HashCode );
    }
}
/*
      This example displays output like the following:
      The hash code for "" is: 0x2D2816FE, 757602046
      The hash code for "a" is: 0xCDCAB7BF, -842352705
      The hash code for "ab" is: 0xCDE8B7BF, -840386625
      The hash code for "abc" is: 0x2001D81A, 536991770
      The hash code for "abd" is: 0xC2A94CB5, -1029092171
      The hash code for "abe" is: 0x6550C150, 1699791184
      The hash code for "abcdef" is: 0x1762906D, 392335469
      The hash code for "abcdeg" is: 0x1763906D, 392401005
      The hash code for "abcdeh" is: 0x175C906D, 391942253
      The hash code for "abcdei" is: 0x175D906D, 392007789
      The hash code for "Abcdeg" is: 0x1763954D, 392402253
      The hash code for "Abcdeh" is: 0x175C954D, 391943501
      The hash code for "Abcdei" is: 0x175D954D, 392009037
*/

Commenti

Il comportamento di GetHashCode dipende dall'implementazione, che può cambiare da una versione di Common Language Runtime a un'altra. Un motivo per cui ciò potrebbe verificarsi è migliorare le prestazioni di GetHashCode.

Importante

Se due oggetti stringa sono uguali, il GetHashCode metodo restituisce valori identici. Non esiste tuttavia un valore di codice hash univoco per ogni valore stringa univoco. Stringhe diverse possono restituire lo stesso codice hash.

Il codice hash stesso non è garantito che sia stabile. I codici hash per stringhe identiche possono essere diversi tra le implementazioni di .NET, tra le versioni di .NET e tra le piattaforme .NET (ad esempio 32 bit e 64 bit) per una singola versione di .NET. In alcuni casi, possono anche differire in base al dominio applicazione. Ciò implica che due esecuzioni successive dello stesso programma possono restituire codici hash diversi.

Di conseguenza, i codici hash non devono mai essere usati all'esterno del dominio applicazione in cui sono stati creati, non devono mai essere usati come campi chiave in una raccolta e non devono mai essere salvati in modo permanente.

Infine, non usare il codice hash anziché un valore restituito da una funzione di hashing crittografico se è necessario un hash crittografico sicuro. Per gli hash crittografici, usare una classe derivata dalla System.Security.Cryptography.HashAlgorithm classe o System.Security.Cryptography.KeyedHashAlgorithm .

Per altre informazioni sui codici hash, vedere Object.GetHashCode.

Nelle app desktop .NET Framework è possibile usare l'elemento< UseRandomizedStringHashAlgorithm> per generare codici hash univoci per ogni dominio applicazione. In questo modo è possibile ridurre il numero di collisioni e migliorare le prestazioni complessive degli inserimenti e delle ricerche che usano tabelle hash. Nell'esempio seguente viene illustrato come usare l'elemento< UseRandomizedStringHashAlgorithm>. Definisce una DisplayString classe che include una costante stringa privata, s, il cui valore è "This is a string". Include anche un ShowStringHashCode metodo che visualizza il valore stringa e il relativo codice hash insieme al nome del dominio applicazione in cui viene eseguito il metodo.

C#
using System;

public class Example
{
   public static void Main()
   {
      // Show hash code in current domain.
      DisplayString display = new DisplayString();
      display.ShowStringHashCode();
      
      // Create a new app domain and show string hash code.
      AppDomain domain = AppDomain.CreateDomain("NewDomain");
      var display2 = (DisplayString) domain.CreateInstanceAndUnwrap(typeof(Example).Assembly.FullName, 
                                                          "DisplayString");   
      display2.ShowStringHashCode();
   }
}

public class DisplayString : MarshalByRefObject
{
   private String s = "This is a string.";
   
   public override bool Equals(Object obj)
   {
      String s2 = obj as String; 
      if (s2 == null)
         return false;
      else
         return s == s2; 
   }

   public bool Equals(String str)
   {
      return s == str;
   }    
   
   public override int GetHashCode()
   {
      return s.GetHashCode();
   }
   
   public override String ToString() 
   {
      return s;
   }

   public void ShowStringHashCode()
   {
      Console.WriteLine("String '{0}' in domain '{1}': {2:X8}",
                        s, AppDomain.CurrentDomain.FriendlyName, 
                        s.GetHashCode());
   }
}

Quando si esegue l'esempio senza fornire un file di configurazione, restituisce un output analogo al seguente. Si noti che i codici hash per la stringa sono identici nei due domini applicazione.

String 'This is a string.' in domain 'PerDomain.exe': 941BCEAC
String 'This is a string.' in domain 'NewDomain': 941BCEAC

Tuttavia, se si aggiunge il file di configurazione seguente alla directory di esempio e, successivamente, si esegue l'esempio, i codici hash per la stessa stringa risulteranno diversi dal dominio dell'applicazione.

XML
<?xml version ="1.0"?>
<configuration>
   <runtime>
      <UseRandomizedStringHashAlgorithm enabled="1" />
   </runtime>
</configuration>

Quando il file di configurazione è presente, l'esempio visualizza il seguente output:

String 'This is a string.' in domain 'PerDomain.exe': 5435776D
String 'This is a string.' in domain 'NewDomain': 75CC8236

Importante

I codici hash vengono usati per inserire e recuperare in modo efficiente oggetti con chiave dalle tabelle hash. Tuttavia, i codici hash non identificano in modo univoco le stringhe. Le stringhe identiche hanno codici hash uguali, ma Common Language Runtime può anche assegnare lo stesso codice hash a stringhe diverse. Inoltre, i codici hash possono variare in base alla versione di .NET, alla piattaforma all'interno di una singola versione e al dominio dell'applicazione. Per questo motivo, non è consigliabile serializzare o rendere persistenti i valori del codice hash, né usarli come chiavi in una tabella hash o in un dizionario.

Per altre informazioni sull'uso dei codici hash e del GetHashCode metodo , vedere Object.GetHashCode.

Note per i chiamanti

Il valore restituito da GetHashCode() è dipendente dalla piattaforma. Si differenzia per le versioni a 32 bit e a 64 bit di .NET Framework. Può anche differire tra le versioni di .NET Framework e .NET Core.

Vedi anche

Si applica a

.NET 9 e altre versioni
Prodotto Versioni
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0