C# で Enum から Dictionary を作る方法。

例えば string → Enum の逆引きハッシュテーブルを使いたい時などに使える奴。

Linq 使わない ver
static public Dictionary< string, EnumType > CreateEnumDictionary<EnumType>()
{
	Dictionary< string, EnumType > table = new Dictionary<string,EnumType>();
	foreach( var value in System.Enum.GetValues(typeof(EnumType)) ) table.Add( value.ToString(), (EnumType)value );
	return table;
}
Linq 使う ver
static public Dictionary<string, EnumType> CreateEnumDictionary<EnumType>()
{
	return System.Enum.GetValues( typeof(EnumType) ).Cast<EnumType>().ToDictionary( t => t.ToString(), t => t );
}
使い方
Dictionary<string, CharacterID> charaid_table = CreateEnumDictionary<CharacterID>();

for( int i=0; i<100; i++ )
{
	string new_chara_name = LoadNextCharacterNameFromFile(); 					// csv 等からキャラ名を読み込む
	UnityEngine.Assertions.Assert.IsFalse( charaid_table.ContainsKey( new_chara_name )	 );	// Debug 版では ASSERTを挟んだほうが安心
	CharacterID new_chara = charaid_table[new_chara_name];						// 効率のよい逆引き
	AddChara( new_chara );
}

実際 csv からデータを引っ張るときは string-Enum テーブルが複数必要になったりするので、関数を汎用化して一行で書けるようにしておくと可読性が良くなる。