【发布时间】:2012-05-04 13:57:21
【问题描述】:
我有这个代码:
class Program
{
static void Main(string[] args)
{
Action whatToDo = () => {
var member = (MemberInfo)(MethodBase.GetCurrentMethod());
Thread.Sleep(0); //whatever, need something to put a breakpoint on
};
whatToDo();
}
}
当我运行它并使用 watch 查看绑定到 member 引用的对象内部时,我看到 MemberInfo.Name 属性的值 <Main>b__0。
这看起来很奇怪。为什么反射不使用whatToDo 名称?如果我在一个成员函数中有多个具有相同签名的操作怎么办 - 我如何判断报告了哪一个?
为什么反射会返回这么奇怪的名字?
【问题讨论】:
-
这是一个匿名函数,你还能期待什么?这是一个实现细节,不要依赖它。
-
"反射为什么不使用
whatToDo名字?" - 以你在c++ 中获得的代表数量,我知道你知道对象变量和它们的值之间的区别:) -
@AakashM:当然可以,但是在 .NET 中有像 metadata 这样的东西。为什么名称不包含在元数据中?
-
什么名字?它应该在这个匿名方法的元数据中添加什么:
a = b = c = () => { Console.WriteLine(); };?
标签: c# .net reflection lambda