如果您曾经使用过Reflector,您可能会注意到C#编译器会生成类型,方法,字段和局部变量,这些变量值得调试器"特殊"显示.例如,以"CS $"开头的局部变量不会显示给用户.匿名方法的闭包类型,自动属性的后备字段等还有其他特殊的命名约定.
我的问题:在哪里可以了解这些命名约定?有谁知道一些文件?
我的目标是使PostSharp 2.0使用相同的约定.
我的程序中有一段代码通过检查它们的类型名称中是否包含"DisplayClass"来区分编译器生成的类.
在阅读这个答案后,我想我需要一个更好的方法.如何从.NET中的用户类中删除编译器生成的类?
我有这个代码:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行它并使用watch来查看绑定到member引用的对象时,我看到该MemberInfo.Name属性具有值<Main>b__0.
这看起来很奇怪.为什么反思不会使用whatToDo名字?如果我在一个成员函数中有更多具有相同签名的操作怎么办 - 如何判断哪一个被报告?
为什么反射会返回这样一个奇怪的名字?