相关疑难解决方法(0)

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

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

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

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

c# compiler-construction debugging

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

调用lambda时"DisplayClass"名称的含义是什么?

根据这个答案,当代码使用lambda方法内部的局部变量时,编译器将生成可以具有名称的额外类c__DisplayClass1.例如以下(完全无用的)代码:

class Program
{
    static void Main()
    {
        try {
            implMain();
        } catch (Exception e) {
            Console.WriteLine(e.ToString());
        }
    }

    static void implMain()
    {
        for (int i = 0; i < 10; i++) {
            invoke(() => {
                Console.WriteLine(i);
                throw new InvalidOperationException();
            });
        }
    }
    static void invoke(Action what)
    {
        what();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出以下调用堆栈:

System.InvalidOperationException
at ConsoleApplication1.Program.<>c__DisplayClass2.<implMain>b__0()
at ConsoleApplication1.Program.invoke(Action what)
at ConsoleApplication1.Program.implMain()
at ConsoleApplication1.Program.Main()
Run Code Online (Sandbox Code Playgroud)

请注意,c__DisplayClass2其中有一个由编译器生成的用于保存循环变量的类的名称.

根据这个答案 c__DisplayClass "手段"

c - >匿名方法闭包类("DisplayClass")

好的,但"DisplayClass"在这里意味着什么?

这会产生什么类"显示"?换句话说,为什么它不是"MagicClass"或"GeneratedClass"或任何其他名称?

.net c# lambda

38
推荐指数
3
解决办法
1万
查看次数

为什么我在此MethodInfo上找不到自定义属性

我有一个带有以下签名的方法

    [Specification]
    public void slide_serialization() {
Run Code Online (Sandbox Code Playgroud)

从我的代码中的一点来看,我需要向上移动堆栈跟踪以找到最接近的方法SpecificationAttribute(性能不是问题).我发现这个方法,但我找不到任何自定义属性.

没有自定义属性

我认为我从未见过这种情况.可能是什么原因?

这是一个单元测试程序集,在Build中禁用了Optimization.

.net c# reflection attributes

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