2012-03-28 1 views
0

У меня есть метод, который я использую, чтобы вывести все имена классов в Ассамблее:

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

Вы пытались использовать 'type.FullName' вместо этого? –

ответ

0

Затвор, когда локальная переменная сохраняется за ее рамки. Например:

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

Компиляция это приведет к закрытию, где lastName сохранит свое значение за кулисами, пока Where не оценивается.

Для получения дополнительной информации: http://en.wikipedia.org/wiki/Closure_(computer_science)