Questo è un tipo anonimo.
tipi anonimi forniscono un modo conveniente per incapsulare un insieme di proprietà sola lettura in un unico oggetto senza dover esplicitamente definire un primo tipo. Il nome del tipo è generato dal compilatore ed è non disponibile a livello di codice sorgente. Il tipo di ciascuna proprietà è dedotto dal compilatore.
http://msdn.microsoft.com/en-us/library/bb397696.aspx
tipi anonimi sono fortemente tipizzati. Dal punto di vista del Common Language Runtime, un tipo anonimo non è diverso da qualsiasi altro tipo di riferimento.
Se due o più tipi anonimi nello stesso assieme hanno lo stesso numero e tipo di proprietà, nello stesso ordine, il compilatore li considera come lo stesso tipo. Condividono le stesse informazioni sul tipo generato dal compilatore.
I tipi anonimi non devono essere trasmessi tra gli assembly o anche come return values dai metodi (possibile, ma raramente, raramente consigliabile).
I tipi anonimi sono un meccanismo di convenienza, ad es. quando si lavora con LINQ, come ad esempio il seguente projection:
LINQ Esempio
var result = myEnumerable.Select(o => new { foo = o.Foo, bar = o.Bar });
// "result" is an enumerable of a new anonymous type containing two properties
Altre domande
Si tratta di una sintassi letterale dizionario?
No, anche se ci sono molte somiglianze. ASP .Net MVC utilizza RouteValueDictionary
e tipi anonimi per rappresentare le stesse informazioni in molti overload di metodi.
come mai i vars non hanno bisogno di una definizione di tipo, nemmeno var?
tipi di valore sono dedotto, anche se l'inferenza non è sempre possibile: http://msdn.microsoft.com/en-us/library/bb531357.aspx (versione VB, se qualcuno conosce l'URL del C# equivalente aggiorna)
fonte
2012-10-05 03:28:21
Ottima risposta. Grazie! – improv32