我有一个方法可用于输出程序集中的所有类名:
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
每次需要以这种方式输出类型名称时,最后一个数字将递增。任何人都能明白这意味着什么吗?
答案 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)