Func<> 能取代 delegate 吗?
今天写程序,忽然想起来很久之前在知乎上看到的一个提问:
c#中的delegate 是不是完全被 func 和action 替代了?
这门语言直接删掉delegate会不会更方便?
众所周知,Func<in TIn, out TOut>的就是一个泛型委托,通过不同输入参数数量的重载定义,Func<>能取代绝大部分delegate。
当时我对这个问题我对这个问题并没有什么感受:毕竟Func<>是用委托定义的,删掉delegate属实是无稽之谈;但另一方面,提问者关于Func<>的感受确实是实实在在真实的,Func<>的的确确省掉了绝大部分需要手工定义委托的场景。
但今天我在写程序的过程中,发现一个有意思的需求,也不能用Func<>来表达。考虑我们有一个函数 GetOrProcess(input, mapInput),它每次会根据input优先从缓存中搜寻结果,如果没有,就使用mapInput(input)计算结果。很自然地,我们可以写下这段方法: