お世話になっております。
しゃまとんです。
以前からclassをkeyにしたDictionaryって出来ないのかなーと思っていて、仕方なくnewなんかしてイケてないなーと思いながら実装していたのですが、こっちの方が良さげなのでメモしておきたいと思います。
やり方はただSystem.Typeを使えば良かったのですね。という話でした。
ということで下記のような感じで確認コードを書いて適当なオブジェクトに付けておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TypeMap : MonoBehaviour { static private Dictionary<System.Type, string> map = new Dictionary<System.Type, string>() { {typeof(TestA), "This is A"}, // {typeof(TestB), "This is B"}, {typeof(TestC), "This is C"}, }; // Use this for initialization void Start () { log<TestA>(); log<TestB>(); log<TestC>(); } // check private void log<T>() { System.Type type = typeof(T); if (map.ContainsKey(type)) { Debug.Log(map[type]); } else { Debug.Log("not found type!!"); } } } // sample classes public class TestA {} public class TestB {} public class TestC {} |
準備ができたら実行してみます。
下図のような感じでclassをKeyにして、Valueを取得することができました。
これだけだと何に使うのという感じなんですが、例えば指定のクラスに対して、指定のメソッドを実行するとか、指定のリクエストをするとか・・・でしょうか?
何にせよ、つっかえが取れた感じなので今後に活かせそうかなと思います!
何かに参考になれば幸いです。
以上です。