Crad's .NET Blog

L'UGIblog di Marco De Sanctis
posts - 190, comments - 457, trackbacks - 70

Linq e Reflector

Il più grande punto di forza di Microsoft LINQ è senza dubbio quel syntactic sugar che ci permette di scrivere query simil-SQL, strong typed e direttamente all'interno del codice C# (o VB.NET che sia).

Supponiamo di voler recuperare, dagli assembly in memoria, l'elenco delle classi che iniziano per una data lettera. In C# 3.0 posso scrivere qualcosa tipo

   1:  var types =
   2:      from assembly in AppDomain.CurrentDomain.GetAssemblies()
   3:      from type in assembly.GetTypes()
   4:      where type.Name.StartsWith("C") && type.IsClass
   5:      select new { Namespace = type.Namespace, Name = type.Name };
   6:   
   7:  foreach (var type in types)
   8:  {
   9:      Console.WriteLine("{0} \t {1}", type.Namespace, type.Name);
  10:  }

In realtà, ciò che avviene under the hood, è che il compilatore si fa carico di trasformare codice di questo tipo in qualcosa che sia traducibile in IL, facendo uso intensivo di extension methods, anonymous types, ecc.

Il risultato di tutto ciò è che, disassemblando quanto compilato con Reflector, ciò che ci si trova davanti è qualcosa del tipo...

Reflector disassemble

Morale: da domani, attenzione ad aver sotto mano anche i sorgenti veri e propri, perché Reflector da solo non basterà più.

Technorati tags: ,

Print | posted on domenica 9 settembre 2007 16:20 | Filed Under [ .Net 3.5 ]

Powered by:
Powered By Subtext Powered By ASP.NET