是否有比C#Action代表更有效的方法来避免代码重复?

是否有比C#Action代表更有效的方法来避免代码重复?,第1张

概述我希望尽可能避免不必要的代码重复.在我下面描述的场景中,我使用了Action代理来避免代码重复.但是,使用Action委托方法时,代码变得慢约50%-80%. 从性能角度来看,是否有一种比Action代理更有效的方法来避免下面描述的场景中的代码重复? 我有两个等效的方法,除了冗长循环的最内层语句: public T[] MethodA<T>(T[] from){ ... for (var 我希望尽可能避免不必要的代码重复.在我下面描述的场景中,我使用了Action代理来避免代码重复.但是,使用Action委托方法时,代码变得慢约50%-80%.

从性能角度来看,是否有一种比Action代理更有效的方法来避免下面描述的场景中的代码重复?

我有两个等效的方法,除了冗长循环的最内层语句:

public T[] MethodA<T>(T[] from){  ...  for (var i = 0; i < len; ++i)  {    var j = GetIndex(i);    to[j] = from[i];    // This statement differs in MethodA and MethodB  }  ...  return to;}public T[] MethodB<T>(T[] from){  ...  for (var i = 0; i < len; ++i)  {    var j = GetIndex(i);    to[i] = from[j];    // This statement differs in MethodA and MethodB  }  ...  return to;}

为了避免代码重复,我实现了一个带有Action委托的辅助方法.委托的调用替换了变量语句,如下所示:

private T[] HelperMethod<T>(T[],Action<T[],T[],int,int> action){  ...  for (var i = 0; i < len; ++i)  {    var j = GetIndex(i);    action(from,to,i,j);    // Invoke the Action delegate  }  ...  return to;}

然后我可以按如下方式减少MethodA和MethodB:

public T[] MethodA<T>(T[] from){  return HelperMethod(from,(src,dest,src_IDx,dest_IDx) => dest[dest_IDx] = src[src_IDx]);}public T[] MethodB<T>(T[] from){  return HelperMethod(from,dest_IDx,src_IDx) => dest[dest_IDx] = src[src_IDx]);}

请注意,重构的MethodA和MethodB之间的唯一区别是HelperMethod调用的Action签名中src_IDx和dest_IDx的顺序.

解决方法@H_404_34@ 您可以将参数传递给方法,并根据参数执行A或B. 我不喜欢它,但我只是说可以做到.我其实更喜欢Action方式. @H_301_40@ 总结

以上是内存溢出为你收集整理的是否有比C#Action代表更有效的方法来避免代码重复?全部内容,希望文章能够帮你解决是否有比C#Action代表更有效的方法来避免代码重复?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225889.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存