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";
}
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用