例えば string → Enum の逆引きハッシュテーブルを使いたい時などに使える奴。
Linq 使わない ver
static public Dictionary< string, EnumType > CreateEnumDictionary<EnumType>() { var 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 ); }
使い方
var 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を挟んだほうが安心 var new_chara = charaid_table[new_chara_name]; // 効率のよい逆引き AddChara( new_chara ); }
実際 csv からデータを引っ張るときは string-Enum テーブルが複数必要になったりするので、関数を汎用化して一行で書けるようにしておくと可読性が良くなる。