8

Oct

LINQ Wizardy

A parte la palese inefficenza di questo estratto di codice, non si può fare a meno di notare come con estrema eleganza si costruisce un albero di oggetti anonimi a partire da una semplice stringa divisa da dollari ($) e punti e virgola (;):

[code language="csharp"]
var group = s.Split('$').GroupBy(p => p.Split(';')[0]).Select(p => new
 {
   ModuleType = int.Parse(p.Key),
   Detail = new []{ 
    new { SubType=int.Parse(p.ToArray()[0].Split(';')[1]), 
      Coordinates=new { X=int.Parse(p.ToArray()[0].Split(';')[2].Split(',')[0]),
       Y=int.Parse(p.ToArray()[0].Split(';')[2].Split(',')[0])} , 
       Path=p.ToArray()[0].Split(';')[3]},
     new { SubType=int.Parse(p.ToArray()[1].Split(';')[1]), 
       Coordinates=new { X=int.Parse(p.ToArray()[1].Split(';')[2].Split(',')[0]),
       Y=int.Parse(p.ToArray()[1].Split(';')[2].Split(',')[0])} , 
       Path=p.ToArray()[1].Split(';')[3]},
     new { SubType=int.Parse(p.ToArray()[2].Split(';')[1]), 
       Coordinates=new { X=int.Parse(p.ToArray()[2].Split(';')[2].Split(',')[0]),
        Y=int.Parse(p.ToArray()[2].Split(';')[2].Split(',')[0])} , 
        Path=p.ToArray()[2].Split(';')[3]}
   }
});
[/code]

by Roberto Freato on 10/8/2010
Post archive