如果不想写繁琐的 switch ,同时也想避免反射带来的开销,考虑一下 Delegate.CreateDelegate 来创建一个可以重复使用的 Delegate
https://gist.github.com/Charles-YYH/97785d39b72bef2df1b639a5e0081289
我放了一个示例在这里,仓促之中写完,这个示例有不少可以优化的地方
1. ProcessInt 和 ProcessString 应该是可以避免使用 object 来作为形参的类型,但是既然你题干中把值类型和引用类型都放在同一个 List 里,说明此处装箱应该是可以接受的
2. 如果觉得 Dictionary 查找太慢,可以考虑使用表达式树来达到和 switch 相同数量级的的性能
相关资料
1. Delegate.CreateDelegate 性能研究: https://stackoverflow.com/a/16078960/8877198 ,大概是普通反射的 30 倍快