C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#でインスタンスのハッシュコードを取得する方法

C#では、GetHashCode()メソッドを使うことで、オブジェクトのインスタンスに対応するハッシュコードを簡単に取得できます。ハッシュコードは、オブジェクトを識別するための整数値であり、コレクション内の検索や比較処理などで活用されます。

ここでは、配列の型情報や列挙型(enum)からハッシュコードを取得する具体例を紹介します。

例1:配列のTypeオブジェクトからハッシュコードを取得する

まずは、文字列配列の型情報(Type)を取得し、そのハッシュコードを出力する基本的な例です。

using System;
public class Demo {
   public static void Main() {
      string[] arr = {"tom", "amit", "kevin", "katie"};
      Type t1 = arr.GetType();
      Type t2 = t1.GetElementType();
      Console.WriteLine("Type = "+t2.ToString());
      Console.WriteLine("Hash Code = "+t1.GetHashCode());
   }
}

出力結果

上記のコードを実行すると、次のような出力が得られます。

Type = System.String
Hash Code = 9144789

この例では、GetType()メソッドによって配列の型情報を取得し、さらにGetElementType()で配列の要素型(System.String)を確認しています。そして、GetHashCode()を呼び出すことで、そのTypeインスタンスのハッシュコードが表示されます。

例2:列挙型(enum)のハッシュコードを取得する

次に、列挙型に対してハッシュコードを取得する例を見てみましょう。あわせて、列挙型に関するさまざまな情報も取得しています。

using System;
public class Demo {
   enum Vehicle {Car, Bus, Bike, Airplane}
   public static void Main() {
      try {
         Vehicle v = Vehicle.Bike;
         Type type = v.GetType();
         Console.WriteLine("Hash code = "+type.GetHashCode());
         string[] str = type.GetEnumNames();
         Console.WriteLine("GetEnumName() to return the constant name = " + str);
         Type type2 = type.GetEnumUnderlyingType();
         Console.Write("Enum Underlying type = "+type2);
         Array arrObj = type.GetEnumValues();
         Console.Write("Values = "+arrObj);
         Console.WriteLine("\nListing constants ..");
         for (int i = 0; i < str.Length; i++)
            Console.Write("{0} ", str[i]);
      }
      catch (ArgumentException e) {
         Console.WriteLine("Not an enum!");
         Console.Write("{0}", e.GetType(), e.Message);
      }
   }
}

出力結果

実行すると、以下の出力が得られます。

Hash code = 44757566
GetEnumName() to return the constant name = System.String[]
Enum Underlying type = System.Int32Values = Demo+Vehicle[]
Listing constants ..
Car Bus Bike Airplane

ポイントまとめ

  • GetHashCode():オブジェクトのハッシュコード(int型)を返します。同じインスタンスに対しては、アプリケーションの実行中に一貫した値が返されます。
  • GetType():現在のインスタンスの正確なランタイム型を表すTypeオブジェクトを返します。
  • GetEnumNames():列挙型に含まれる定数名を文字列配列として返します。
  • GetEnumUnderlyingType():列挙型の基になる型(この例ではSystem.Int32)を返します。
  • GetEnumValues():列挙型に含まれるすべての定数値を配列として返します。

なお、ハッシュコードの具体的な値は実行環境やプロセスごとに異なる場合があります。ハッシュコードはオブジェクトの一意性を保証するものではないため、永続的な識別子として保存・利用することは避けましょう。あくまで、ハッシュテーブルなどのデータ構造での高速な検索を目的として使用するのが適切です。

  1. C#で値型CharのTypeCodeを取得する方法

    C#において、値型CharのTypeCodeを取得するには、GetTypeCode()メソッドを使用します。このメソッドはTypeCode列挙型の値を返し、char型の場合は「Char」が返されます。以下に具体的なサンプルコードを示します。 例1 using System; public class Demo {    public static void Main() {       char val = '5';       bool res;       Cons

  2. Pythonで型(タイプ)をチェックする標準的な方法とは?

    Pythonでは、オブジェクトの型を確認する方法が主に2つあります。それぞれの使い方と違いを理解しておくと、より安全で意図に合ったコードを書くことができます。type() と is を使った厳密な型チェックオブジェクト x が指定した型そのもの(サブクラスを含まない)であるかを厳密に判定したい場合は、type() で型を取得し、is 演算子で比較します。例x = Hello if type(x) is str: print(xはstrのインスタンスです)出力xはstrのインスタンスですこの方法では、x の型が正確に str である場合のみ True になります。str を継承したサブク