2013-02-05 13 views
6

Devo creare coppie/triple di qualcosa di e memorizzarlo da qualche parte. Come posso farlo?Elenco di tipi anonimi?

ho provato:

for (int i = 0; i < 100; i++) 
{ 
    var item=new { a=i , b="lala" ,c=4.5m}; //anonymous type 
} 

ma poi ho pensato: List<what>?

Potrei usare dinamico ma voglio Intellisense.

(avrei potuto anche usare Tuple<int,string,decimal> ma se ho già quello che mi serve (=new { a=i , b="lala" ,c=4.5m};), perché dovrei utilizzare altro tipo (tupla)?)

Esiste una soluzione a questo?

+0

"qualcosa" deriva da un'interfaccia o da una classe? – daryal

+0

no. Lo creo al volo. (come nel mio esempio) –

+0

Vuoi dire che vuoi creare un elenco di tipo anonimo? –

risposta

14

È possibile utilizzare l'inferenza di tipo

var items = Enumerable.Range(0,100) 
         .Select(i => new { a=i , b="lala", c=4.5m }) 
         .ToList(); // not necessary (you can use IEnumerable) 
+0

ToList impedisce già il problema var catturato.right? –

+0

@RoyiNamir mi dispiace, non ho capito cosa intendi per * problema var * catturato *. Se vuoi usare gli oggetti più volte, allora è meglio usare 'ToList()' o 'ToArray()'. Se vai a ripetere una volta gli oggetti, usa semplicemente 'IEnumerable ' di tipo anonimo (ulteriori enumerazioni creeranno nuovi elementi). Ecco perché ho aggiunto quel commento a 'ToList()'. –

3

Non è sicuro, come si compila i campi all'interno for, ma si potrebbe provare:

var lstOfSmth = Enumerable.Range(0, 100) 
          .Select(i => new { a = i, b = "lala", c = 4.5m }) 
          .ToList(); 
2

Perché usare altro tipo (tuple)

Perché sono stati progettati esattamente per questo scopo. Se hai paura del codice dettagliato, anche la direttiva using viene in soccorso.

using myPair = Tuple<int,string>; 
using myTriple = Tuple<int,string,decimal>; 
//... 
for (int i = 0; i < 100; i++) 
{ 
    myPair pair = new myPair(1,"string"); 
    myTriple triple = new myTriple(i,"lala", 4.5); 
} 
+2

Alex - il 4,5 m non è un'unità di misura (non è metri). Sta forzando il 4,5 a essere un numero decimale invece di un numero in virgola mobile, che è un mondo di differenza numericamente parlando. – Eilon

+0

http://www.dotnetperls.com/suffix –

+0

Oh vergogna l'ho perso. Sistemerò le cose – Alex