2014-10-27 32 views
12

Quando si tenta di compilare questo:Dichiarare un membro di tipo anonimo con un nome semplice

var car = new { "toyota", 5000 }; 

Si otterrà l'errore del compilatore membri non valido tipo anonimo membro dichiaratore tipo anonimo" devono essere dichiarate con un incarico di membro. , nome semplice o accesso ai membri. " perché il compilatore non è in grado di dedurre il nome delle proprietà dalle rispettive espressioni. Ciò ha perfettamente senso.

Ciò che mi incuriosisce è che il messaggio di errore implica tre modi validi per dichiarare un membro del tipo. Assegnazione membro e l'accesso utente sono evidenti:

// member assignment 
var v = new { Amount = 108, Message = "Hello" }; 

// member access 
var productQuery = 
    from prod in products 
    select new { prod.Color, prod.Price }; 

Quale sarebbe un esempio di dichiarare con un nome semplice?

Googling e le relative domande sul SO comportare esempi di membro assegnazione e accesso unico membro.

risposta

12

Per quanto ne so, simple name dichiarazione è questa:

var amount = 10; 
var whatever = "hello"; 

var newType = { amount, whatever } 

Che creerà automaticamente un tipo anonimo pari a:

var newType = { amount = amount, whatever = whatever } 
+5

In realtà, semplice nome è un termine specifico dal [ Spec. C#) (http://msdn.microsoft.com/en-us/library/aa691350 (v = vs.71) .aspx). Citazione: 'Un nome semplice è costituito da un identificatore, opzionalmente seguito da un elenco di argomenti tipo: nome semplice: identificativo tipo-argomento-listopt ' pagina 158, paragrafo ** 7.6.2 ** da C# 5.0 spec. MSDN e le specifiche del linguaggio sono un po 'fuori sincrono. [Specifica] (http://www.microsoft.com/en-us/download/confirmation.aspx?id=7029) fornisce una definizione più profonda –