Lambda表达式是一个匿名的方法,在开发期我们是不知道其方法名是什么的,所以我们要怎么递归调用呢?
如果你看过我这文章《让您知道您的方法是被何“人”调用 》的话,你应该会“啊哈”的拍一下头脑,思路就出来了,没错!!就是直接用StackFrame获取当前执行的方法,然后直接Invoke即可。
示例代码:
class Test

{

/**//// <summary>
///
/// </summary>
/// <param name="v1"></param>
/// <param name="v2"></param>
/// <param name="num"></param>
/// <param name="total"></param>
/// <returns></returns>
public delegate long AddMethod(long v1, long v2, int num, int cout);


/**//// <summary>
///
/// </summary>
/// <param name="addMethod"></param>
/// <param name="cout"></param>
static void Print(AddMethod method, int cout)

{
Console.WriteLine(method(0, 1, 2, cout));
}

static void Main()

{
//求0,1,1,2,3,5,8
.类似的数据队列在第30个位置的数
Print((v1, v2, num, cout) =>

{
Console.Write(v1);
Console.Write(",");

num++;
if (num == cout)

{
Console.Write(v2);
Console.WriteLine();
return v1 + v2;
}
else

{
//取得当前方法
StackFrame frame = new StackFrame(0);
//递归调用

return (long)(frame.GetMethod().Invoke(num, new object[]
{ v2, (v1 + v2), num, cout }));
}
}, 30);
Console.Read();
}
}我们的代码成功运行了

,成功的求出在第30个位置的数值是:514229
其时,.NET里还有一个东东可以方便的得到当前调用方法的引用,这东东就是
MethodBase,其有一个静态方法GetCurrentMethod 可直接获取当前执行的方法引用,所以我们可以将上面的StackFrame处的两句代码改为如下:
//递归调用

return (long)(MethodBase.GetCurrentMethod().Invoke(num, new object[]
{ v2, (v1 + v2), num, cout }));执行后的结果都是一样的

(不一样才怪了Orz)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义