我想获取带有 Iterator Method 参数的方法名称,我正在努力寻找一个简单的解决方案。迭代器由编译器生成,因此源方法名称和它的参数现在分别位于生成的类名和它的字段中(带有一些神奇的 <>+_d 符号)。
在 Visual Studio 的即时窗口中,当我输入迭代器方法时,我会以一种漂亮的方式获得方法名称及其参数。他们是在使用一些定制打印机还是有一些帮手可以做到这一点?
编辑:
主要目标是获取协程异步调用堆栈。
Program.Test(a, b)
Program.TestB(b)
这是一个例子:
using System;
using System.Collections;
using System.Linq;
class Program
{
static IEnumerable TestB(string b)
{
yield return b;
yield return b;
}
static IEnumerable Test(string a, string b)
{
yield return a;
yield return TestB(b);
}
static void Main(string[] args)
{
var iterator = Test("foo", "bar");
// Immediate Window
// ================
// iterator
// {Program.Test}
// a: null
// b: null
// System.Collections.Generic.IEnumerator<System.Object>.Current: null
// System.Collections.IEnumerator.Current: null
Console.WriteLine(iterator);
// prints:
// Program+<Test>d__0
foreach (var field in iterator.GetType().GetFields())
Console.WriteLine(field);
// prints:
// System.String a
// System.String <>3__a
// System.String b
// System.String <>3__b
}
}