jzm*_*jzm 13 .net c# linq func c#-4.0
这是一个好奇的问题,你们都知道:
使用Func而不是方法有什么危害/缺点吗?简单的例子:
private static Func<int, int, DBContext, List<T>> Foo =
(i1, i2, dbc) =>
(i1 != 0) ? dbc.Bar(i2) : new List<T> { /*some default values ...*/ };
Run Code Online (Sandbox Code Playgroud)
VS
private static List<T> Foo(int i1, int i2, DBContext dbc)
{
return i1 != 0 ? dbc.Bar(i2) : new List<T> { /*some default values ...*/ };
}
Run Code Online (Sandbox Code Playgroud)
Car*_*ten 11
我看到了几个缺点:
因为你没有得到任何东西,我只会在局部和小的环境中这样做,而更喜欢静态方法
性能并不像最初看起来那么多,调用委托的成本和通过v_table
(虚拟实例方法)调度的方法是可比较的.在这种情况下,对于静态方法,不使用委托可能会有很小的性能提升.
您在此处发现的"技巧"是一种相当常见的技术,无需借助面向对象的编程技术(例如策略模式)即可实现功能分解.您可以通过调用委托来替换方法调用.这个技巧的另一个不错的方面是调用的语法是相同的.
但是,我会非常小心地应用这种技术.我通常用它来避免使用单个方法的接口,没有多于一个或两个参数(否则我会考虑使用参数对象或使用接口).
C#是一种多范式语言,使用每种范例都有其自己的位置.功能范例(例如使用Funcs而不是编译时已知的方法)和面向对象的范例一样,都有它们的地位.在您的情况下,使用a没有任何好处Func<>
,您应该使用传统方法来清晰.