うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】enum を key にした Dictionary

enum を key にした Dictionary は便利ですが、enum が内部的にはクラスな都合上不都合が生じます

そのため

dictionary[(int)Hoge.A]

のようにわざわざ key を int にして、enum から int にキャストしてアクセスして利用しなければいけません

そのため、Dictionary をベースに EnumDictionary を作成しました

Generic なので、boxing せずに値を取得する方法は GetHashCode しかないため
int キャストと比べると遅いですが、こちらを利用しています

個人的によく使うであろうメソッドは定義しましたが、足りない部分は各自で実装してもらえれば

コード

public class EnumDictionary<TKey, TValue> : Dictionary<int, TValue> where TKey : Enum
{
    public void Add(TKey key, TValue value)
    {
        base.Add(key.GetHashCode(), value);
    }
  
    public bool ContainsKey(TKey key)
    {
        return base.ContainsKey(key.GetHashCode());
    }
  
    public bool Remove(TKey key)
    {
        return base.Remove(key.GetHashCode());
    }
 
    public bool TryGetValue(TKey key, out TValue value)
    {
        return base.TryGetValue(key.GetHashCode(), out value);
    }
 
    public TValue this[TKey key]
    {
        get => base[key.GetHashCode()];
        set => base[key.GetHashCode()] = value;
    }
}