Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo String.GetHashCode ()

 

Data di pubblicazione: ottobre 2016

Restituisce il codice hash di questa stringa.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

public override int GetHashCode()

Valore restituito

Type: System.Int32

Un codice hash intero con segno a 32 bit.

Il comportamento di GetHashCode dipende dalla relativa implementazione, che potrebbe cambiare da una versione di common language runtime. È un motivo per cui questa situazione può verificarsi per migliorare le prestazioni di GetHashCode.

System_CAPS_importantImportante

Se due oggetti string specificati sono uguali, il GetHashCode metodo restituisce valori identici. Tuttavia, non c'è un valore del codice hash univoco per ogni valore di stringa univoco. Stringhe diverse possono restituire lo stesso codice hash.

Non è necessariamente che il codice hash stabile. Codice hash per stringhe identiche possono variare tra le versioni di .NET Framework e su più piattaforme (ad esempio 32 bit e 64 bit) per una singola versione di .NET Framework. In alcuni casi, possono anche differire dal dominio applicazione.

Di conseguenza, hash codici non devono mai essere utilizzati di fuori del dominio applicazione in cui sono stati creati, non deve mai essere utilizzati come campi chiave in una raccolta e non deve essere mantenute.

Infine, non utilizzare il codice hash anziché un valore restituito da una funzione hash di crittografia, se è necessario un hash crittografico. Per gli hash di crittografia, utilizzare una classe derivata dal System.Security.Cryptography.HashAlgorithm o System.Security.Cryptography.KeyedHashAlgorithm classe.

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

Nelle App desktop, è possibile utilizzare il <UseRandomizedStringHashAlgorithm>elemento per generare codice hash univoco in una base di un dominio di applicazione.</UseRandomizedStringHashAlgorithm> Questo può ridurre il numero di conflitti e migliorare le prestazioni complessive di inserimenti e le ricerche che utilizzano le tabelle hash. Nell'esempio seguente viene illustrato come utilizzare il <UseRandomizedStringHashAlgorithm>elemento.</UseRandomizedStringHashAlgorithm> Definisce un per generare codice hash univoco in una base di un dominio di applicazione. Questo può ridurre il numero di conflitti e migliorare le prestazioni complessive di inserimenti e le ricerche che utilizzano le tabelle hash. Nell'esempio seguente viene illustrato come utilizzare il. Definisce un DisplayString classe che include una costante di stringa privata, s, il cui valore è "This is a una stringa". Include inoltre un ShowStringHashCode metodo che visualizza il valore di stringa e il codice hash insieme al nome del dominio dell'applicazione in cui l'esecuzione del metodo.

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, viene visualizzato l'output simile al seguente. Si noti che i codici hash per la stringa siano identici in 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 dell'esempio e quindi eseguire l'esempio, i codici hash per la stessa stringa diverso dal dominio applicazione.


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

Quando il file di configurazione è presente, nell'esempio viene visualizzato il seguente output:


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

System_CAPS_importantImportante

I codici hash vengono utilizzati per inserire e recuperare gli oggetti con chiavi da tabelle hash in modo efficiente. Tuttavia, i codici hash non identificare in modo univoco le stringhe. Stringhe identiche hanno i codici hash uguali, ma common language runtime può inoltre assegnare lo stesso codice hash di stringhe diverse. Inoltre, i codici hash possono variare da una versione di .NET Framework, dalla piattaforma all'interno di un'unica versione e dal dominio applicazione. Per questo motivo, è consigliabile non serializzare o mantenere i valori di codice hash, né utilizzare le chiavi in una tabella hash o un dizionario.

Per ulteriori informazioni sull'utilizzo dei codici hash e GetHashCode metodo, vedere Object.GetHashCode.

Note per i chiamanti:

Il valore restituito da GetHashCode dipende dalla piattaforma. La differenza nelle versioni a 32 e 64 bit di .NET Framework. È anche possibile diverso tra le versioni di .NET Framework.

System_CAPS_warningAvviso

Codice hash è destinato inserimento efficiente e la ricerca nelle raccolte basate su una tabella hash. Codice hash non è un valore permanente. Per questo motivo:

  • Non serializzare i valori di codice hash o archiviarli nel database.

  • Non utilizzare il codice hash come chiave per recuperare un oggetto da una raccolta con chiave.

  • Non utilizzare il codice hash anziché un valore restituito da una funzione hash di crittografia. Per gli hash di crittografia, utilizzare una classe derivata dal System.Security.Cryptography.HashAlgorithm o System.Security.Cryptography.KeyedHashAlgorithm classe.

  • Verifica l'uguaglianza dei codici hash per determinare se due oggetti sono uguali. (Oggetti diversi possono avere codici hash identici). Per verificare l'uguaglianza, chiamare il ReferenceEqualso Equals metodo.

Nell'esempio seguente viene illustrato il GetHashCode metodo utilizzando diverse stringhe di input.

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
*/

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: