using System.Collections.Generic;
public static Dictionary<Type, Func<object, object>> dict = new Dictionary<Type, Func<object, object>>();
public static object Call<T>(T argument) {
var func = dict[typeof(T)];
return func.Invoke((object)argument);
public static string TestFunction(string val)
return val + " was typecast";
public static Func<object, object> Wrap<T, TResult>(Func<T, TResult> func)
Func<object, object> wrapped = arg => func((T)arg);
public static void Main()
Func<string, string> testFunction = TestFunction;
dict[typeof(string)] = Wrap(testFunction);
System.Console.WriteLine(Call("argIn"));