型を作成して格納できます(のメソッドからのDictionary<Type, Action<object>>
戻り値と、特定の型に対して実行するコードを実行するデリゲートと共に)。GetType
a
たとえば、これを見てください:
private readonly Dictionary<Type, Action<object>> typeActions = new Dictionary<Type, Action<object>>()
{
{ typeof(int), (a) => { Console.WriteLine(a.ToString() + " is an integer!"); } },
{ typeof(float), (a) => { Console.WriteLine(a.ToString() + " is a single-precision floating-point number!"); } }
};
この辞書は、コードの他の場所で使用できます。
Action<object> action;
if (typeActions.TryGetValue(a.GetType(), out action)) {
action(a);
}
a
アクション内で適切な型にキャストする必要があることに注意してください。
編集:クリスが正しく指摘したように、登録されたタイプのサブクラスに属しているa.GetType()
かどうかは認識されません。a
それを含める必要がある場合は、型階層をたどる必要があります。
Action<object> action = null;
for (Type t = a.GetType(); t = t.BaseType; t != null) {
if (typeActions.TryGetValue(t, out action)) {
break;
}
}
if (action != null) {
action(a);
}
ジェネリック型および/またはインターフェイスをカバーする必要がある場合、これも実行可能ですが、コードは着実に複雑になります。