相关疑难解决方法(0)

哪里可以了解VS调试器'魔术名'

如果您曾经使用过Reflector,您可能会注意到C#编译器会生成类型,方法,字段和局部变量,这些变量值得调试器"特殊"显示.例如,以"CS $"开头的局部变量不会显示给用户.匿名方法的闭包类型,自动属性的后备字段等还有其他特殊的命名约定.

我的问题:在哪里可以了解这些命名约定?有谁知道一些文件?

我的目标是使PostSharp 2.0使用相同的约定.

c# compiler-construction debugging

107
推荐指数
1
解决办法
9618
查看次数

如何从.NET中的用户类distingush编译器生成的类

我的程序中有一段代码通过检查它们的类型名称中是否包含"DisplayClass"来区分编译器生成的类.
在阅读这个答案后,我想我需要一个更好的方法.如何从.NET中的用户类中删除编译器生成的类?

.net c# compiler-construction reflection

7
推荐指数
2
解决办法
4237
查看次数

为什么反射会为lambda返回一个奇怪的名字?

我有这个代码:

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名字?如果我在一个成员函数中有更多具有相同签名的操作怎么办 - 如何判断哪一个被报告?

为什么反射会返回这样一个奇怪的名字?

.net c# reflection lambda

1
推荐指数
1
解决办法
532
查看次数

标签 统计

c# ×3

.net ×2

compiler-construction ×2

reflection ×2

debugging ×1

lambda ×1