Una delle (tante) novità di Orcas è costituita dagi Anonymous Types. Novità che in un primo momento mi turbava e che, sotto certi aspetti, continua a farlo.
Ma di cosa si tratta?
In questo bel post di ScottGu, viene spiegato in modo estremamente semplice cosa è e dove si utizza. In poche parole, gli Aninymous Types permettono di definire tipi senza dover esplicitamente una dichiarazione formale della classe (mmm) permettendoci di fare una cosa del tipo:
1: var name = "Mighell"
2: var age = 30
Così, su due piedi, la cosa appare (IMHO) davvero brutta ma, a dispetto delle apparenze, var NON E' un tipo "generico" o riferito ad object!!!. Citando direttamente Scott:
when first seeing the new var keyword is to think that it is a late-bound or un-typed variable reference (for example: a reference of type Object or a late-bound object like in Javascript). This is incorrect -- the var keyword always generates a strongly typed variable reference
Questo vuol dire che, a livello di IL generato, il codice di sopra equivale esattamente a:
1: string name = "Mighell";
2: int age = 30
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }
Visti in questo modo, gli Anonymous Type potrebbero apparire inutili o poco sensati. Dove tornano davvero comodi ed utili è nell'utilizzo di di LINQ.
Non ho Orcas installato quindi riprendo un attimo il codice postato da Scott:
(immagine tratta dal post di ScottGu)
In questo caso, il tipo products è automaticamente creato dalla select fatta con Linq e le 4 proprietà sono tipizzate esattamente come nella classe originale (Products).
In questo articolo si trovano altre informazioni relative agli Anonymous Type.
E' abbastanza evidente la comodità di questa nuova funzionalità di Orcas. Sebbene mi sia convinto che gli Anonymous Type siano utili e decisamente comodi, continuo a restare dell'opinione che non siano proprio bellissimi (anche se non vedo alternative).
Durante l'MVP Summit, ho anche scoperto che non sono l'unico a cui non piacciono e, durante l'incontro con il team di C#, è stata fatta una richiesta specifica proprio sul modo in cui gestire questi "tipi" in Visual Studio. Ovviamente non ne posso parlare, ma se dovessero accettare la nostra richiesta, potrebbero piacermi un po' di più
.
Stay tuned 
.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }