Hashtable を利用して Key-Valueデータを扱う - C#

Hashtable を利用して Key-Valueデータを扱うコードを紹介します。

概要

C#でkeyに対応した値(value)の保持にはHashtableクラスを利用できます。 この記事ではHashtableクラスを利用してデータの格納や取り出しをするコードを紹介します。

実装例:値の追加と取得

Hashtableクラスのインスタンスを作成し、キーと値を挿入するプログラムです。
Windowsフォームアプリケーションを作成します。

UI

下図のフォームを作成します。ボタンとテキストボックスを配置します。

コード

以下のコードを記述します。
using System.Collections;

namespace HashtableDemo
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Hashtable table = new Hashtable();

      table.Add("index.html", 100);
      table.Add("product.html", 34);
      table.Add("news.html", 58);
      table.Add("contact.html", 27);
      table.Add("download.html", 48);

      int value = (int)(table["news.html"] ?? -1);
      textBox1.Text += Convert.ToString(value) + "\r\n";
    }
  }
}

解説

下記コードにてHashtable クラスを宣言します。
Hashtable table = new Hashtable();

Add()メソッドを呼び出してKey-Valueデータを追加します。Addメソッドのkey, valueの型はobject型で定義されているため、 どのような型の値でも挿入できます。
  table.Add("index.html", 100);
  table.Add("product.html", 34);
  table.Add("news.html", 58);
  table.Add("contact.html", 27);
  table.Add("download.html", 48);

キーを指定してキーの値を取り出します。上記のコードでは"news.html"のキーの値を取得します。(58が取得されます。) 値はobject型として取得されるため、値のキャストやnullのチェック処理を記述しています。 ?? 演算子についてはこちらの記事を参照してください。
  int value = (int)(table["news.html"] ?? -1);

取得した値はテキストボックスに表示します。
  textBox1.Text += Convert.ToString(value) + "\r\n";

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[Button1]ボタンをクリックします。"news.html"のキーの値である "58" が画面に表示されます。

存在しないキーへの対応

以下のコードを実行すると存在しないキーを指定して値を取り出すことになり、NullReferenceException 例外が発生します。
  private void button2_Click(object sender, EventArgs e)
  {
    Hashtable table = new Hashtable();

    table.Add("index.html", 100);
    table.Add("product.html", 34);
    table.Add("news.html", 58);
    table.Add("contact.html", 27);
    table.Add("download.html", 48);

    int value = (int)table["mail.html"];
    textBox1.Text += Convert.ToString(value) + "\r\n";
  }

実行すると以下の例外が発生します。
エラーメッセージ
System.NullReferenceException: 'Object reference not set to an instance of an object.'


例外を発生させないための対策として、最初に紹介したコードのようにnull 合体演算子を利用すると例外の発生を抑えられます。
  private void button2_Click(object sender, EventArgs e)
  {
    Hashtable table = new Hashtable();

    table.Add("index.html", 100);
    table.Add("product.html", 34);
    table.Add("news.html", 58);
    table.Add("contact.html", 27);
    table.Add("download.html", 48);

    int value = (int)(table["mail.html"] ?? -1);
    textBox1.Text += Convert.ToString(value) + "\r\n";
  }


このページのキーワード
  • Key-Valueデータ
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2011-07-01
iPentec all rights reserverd.