2025年12月

今天写程序,忽然想起来很久之前在知乎上看到的一个提问

c#中的delegate 是不是完全被 func 和action 替代了?
这门语言直接删掉delegate会不会更方便?

众所周知,Func<in TIn, out TOut>的就是一个泛型委托,通过不同输入参数数量的重载定义,Func<>能取代绝大部分delegate

当时我对这个问题我对这个问题并没有什么感受:毕竟Func<>是用委托定义的,删掉delegate属实是无稽之谈;但另一方面,提问者关于Func<>的感受确实是实实在在真实的,Func<>的的确确省掉了绝大部分需要手工定义委托的场景。

但今天我在写程序的过程中,发现一个有意思的需求,也不能用Func<>来表达。考虑我们有一个函数 GetOrProcess(input, mapInput),它每次会根据input优先从缓存中搜寻结果,如果没有,就使用mapInput(input)计算结果。很自然地,我们可以写下这段方法:

阅读剩余部分