Type类型名称为“_Closure $ __ 1”时的含义是什么?

时间:2012-03-28 13:39:24

标签: .net .net-assembly

我有一个方法可用于输出程序集中的所有类名:

private static void ListClasses()
{
    var assembly = Assembly.LoadFile(@"path\to\my.dll");
    Type[] types = assembly.GetTypes().Where(t => t.IsClass).ToArray();

    using (StreamWriter w = File.AppendText("log.txt"))
    {
        foreach (var type in types)
        {
            w.WriteLine(type.Namespace + "," + type.Name);
            w.Flush();
        }

        w.Close();
    }

    Console.WriteLine("Done");
}

我看到的唯一问题是一些类名有这个输出:

The.Namespace,_Closure$__1

每次需要以这种方式输出类型名称时,最后一个数字将递增。任何人都能明白这意味着什么吗?

2 个答案:

答案 0 :(得分:3)

这些是lambda表达式用于捕获lambda表达式中的自由变量的编译器生成的类。

http://msdn.microsoft.com/en-us/library/bb981314%28v=vs.80%29.aspx

答案 1 :(得分:0)

闭包是当局部变量持久化超出其范围时。例如:

public IEnumerable<Employee> GetEmployees(string lastName)
{
    return employees.Where(e => e.LastName == lastName);
}

编译这将导致关闭,lastName将在幕后保持其值,直到评估Where

有关详细信息:http://en.wikipedia.org/wiki/Closure_(computer_science