Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

String.GetHashCode-Methode: ()

 

Veröffentlicht: Oktober 2016

Gibt den Hashcode für diese Zeichenfolge zurück.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public override int GetHashCode()

Rückgabewert

Type: System.Int32

Ein 32-Bit-Hashcode als ganze Zahl mit Vorzeichen.

Das Verhalten des GetHashCode ist abhängig von seiner Implementierung, die von einer Version der common Language Runtime in einen anderen ändern kann. Ein Grund, warum dies geschieht, ist zum Verbessern der Leistung von GetHashCode.

System_CAPS_importantWichtig

Wenn zwei Zeichenfolgenobjekte gleich sind, die GetHashCode -Methode identische Werte zurück. Es ist jedoch kein eindeutigen Hashcodewert für jeden eindeutigen Zeichenfolgenwert. Andere Zeichenfolgen können den gleichen Hashcode zurückgeben.

Für weitere Details über Hashcodes siehe Object.GetHashCode. Hashcodes für identische Zeichenfolgen können über den .NET Framework-Versionen und Plattformen (z. B. 32-Bit- und 64-Bit) für eine einzelne Version von .NET Framework unterscheiden. In einigen Fällen können sie auch nach Anwendungsdomäne unterscheiden.

Als Ergebnis Codes niemals außerhalb der Anwendungsdomäne verwendet werden sollte in der sie erstellt wurden, sollten niemals als Felder in einer Auflistung verwendet werden, und sie nie beibehalten werden soll.

Verwenden Sie schließlich den Hashcode nicht statt eines Werts von einer kryptografischen Hashfunktion zurückgegeben, wenn Sie einen kryptografisch starken Hash benötigen. Verwenden Sie für kryptografische Hashes eine abgeleitete Klasse die System.Security.Cryptography.HashAlgorithm oder System.Security.Cryptography.KeyedHashAlgorithm Klasse.

Weitere Informationen zu Hashcodes finden Sie unter Object.GetHashCode.

Bei desktop-apps können Sie die <UseRandomizedStringHashAlgorithm>Element zum Generieren eindeutiger Hashcodes für eine pro Anwendungsdomäne.</UseRandomizedStringHashAlgorithm> Dies kann verringern Sie die Anzahl der Konflikte und verbessern die allgemeine Leistung der Einfüge- und Suchvorgänge, die Hashtabellen verwenden. Das folgende Beispiel zeigt, wie Sie die <UseRandomizedStringHashAlgorithm>Element.</UseRandomizedStringHashAlgorithm> Definiert eine zum Generieren eindeutiger Hashcodes für eine pro Anwendungsdomäne. Dies kann verringern Sie die Anzahl der Konflikte und verbessern die allgemeine Leistung der Einfüge- und Suchvorgänge, die Hashtabellen verwenden. Das folgende Beispiel zeigt, wie Sie die. Definiert eine DisplayString Klasse, die eine private Zeichenfolgenkonstante enthält s, dessen Wert ist "This is String". Außerdem enthält sie eine ShowStringHashCode-Methode, die den Zeichenfolgenwert und dessen Hashcode zusammen mit dem Namen der Anwendungsdomäne anzeigt, in der die Methode ausgeführt wird.

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());
   }
}

Wenn Sie das Beispiel ausführen, ohne eine Konfigurationsdatei anzugeben, wird die folgende Ausgabe angezeigt. Beachten Sie, dass die Hashcodes für die Zeichenfolge in den zwei Anwendungsdomänen identisch sind.


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

Wenn Sie jedoch die folgende Konfigurationsdatei im Verzeichnis des Beispiels hinzufügen und dann das Beispiel ausführen, unterscheiden sich die Hashcodes je nach Anwendungsdomäne.


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

Wenn die Konfigurationsdatei vorhanden ist, zeigt das Beispiel die folgende Ausgabe an:


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

System_CAPS_importantWichtig

Die Hashcodes von Objekten dienen dazu, diese Objekte anhand einer Hashtabelle effizient zu einer Liste hinzuzufügen oder abzurufen. Hashcodes jedoch nicht eindeutig Zeichenfolgen identifiziert. Identische Zeichenfolgen haben gleich Hashcodes, aber die common Language Runtime kann auch den gleichen Hashcode in andere Zeichenfolgen zuweisen. Darüber hinaus variieren Hashcodes von .NET Framework-Version, von der Plattform in eine einzelne Version und nach Anwendungsdomäne. Aus diesem Grund sollten Sie nicht serialisieren oder Code Hashwerte beibehalten noch sollten Sie verwenden diese als Schlüssel in einer Hashtabelle oder dem Wörterbuch.

Weitere Informationen zur Verwendung von Hashcodes und GetHashCode -Methode finden Sie unter Object.GetHashCode.

Hinweise für Aufrufer:

Der Rückgabewert von GetHashCode ist plattformabhängig. Es unterscheidet sich auf die 32-Bit und 64-Bit-Versionen von .NET Framework. Sie können auch die unterscheidet sich zwischen verschiedenen Versionen von .NET Framework.

System_CAPS_warningWarnung

Ein Hash ist für effizientes Einfügen und Suchen in den Auflistungen vorgesehen, die auf einer Hashtabelle basieren. Ein Hashcode ist kein permanente Wert. Aus diesem Grund:

  • Serialisieren Sie weder hashcodierte Darstellungen noch speichern Sie sie in den Datenbanken.

  • Verwenden Sie nicht den Hash als Schlüssel an, um ein Objekt aus einer schlüsselgebundenen Auflistung abzurufen.

  • Verwenden Sie nicht den Hashcode, statt eines Werts von einer kryptografischen Hashfunktion zurückgegeben. Verwenden Sie für kryptografische Hashes eine abgeleitete Klasse die System.Security.Cryptography.HashAlgorithm oder System.Security.Cryptography.KeyedHashAlgorithm Klasse.

  • Testen Sie nicht auf die Gleichheit von Hashcodes, um zu bestimmen, ob zwei Objekte gleich sind. (Ungleich Objekte können identische Hashcodes verfügen.) Um auf Gleichheit zu testen, rufen Sie die ReferenceEqualsoder Equals Methode.

Das folgende Beispiel veranschaulicht die GetHashCode Methode, die mit verschiedenen Eingabezeichenfolgen.

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

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: