2012-07-26 14 views
5

Ho una lista con molti oggetti List<MyObjects> - Sto iterando attraverso questa lista e leggendo gli oggetti. Questo è tutto a posto. Mi sono appena relizzato ora, che sarebbe fantastico se potessi aggiungere 1 altro valore speciale a questo Elenco - non un Oggetto, solo 1 valore di qualcosa (una stringa).Aggiungi proprietà a un elenco?

ora potevo creare una classe come

class Needless 
{ 
    public List<MyObjects> MyList { get; set; } 
    public string MyValue { get; set; } 
} 

ma Im cercando di evitare questo. Ho davvero bisogno di 1 stringa con un input ogni List<MyObjects> Qualche idea?

+0

È 'MyValue' indipendente dai valori in' MyList'? –

+0

MyValue identifica MyList – miri

+0

Funzionerebbe in questa situazione per aggiungere 'MyList' e' MyValue' a un 'Dictionary', come' Dictionary > '? –

risposta

8

Tuple<string, List<MyObject>> è un'opzione. Tuttavia, se intendi utilizzare questo abbinamento molto, ti suggerirei di creare una classe personalizzata per renderla più esplicita - o come hai fatto tu, o derivando List<MyObject> e aggiungendo la stringa come una proprietà.

Se si sta lavorando "in scope" si può sempre fare i tipi anonimi:

var t = new { TheString = "", TheList = new List<MyObject>() }; 
var list = t.TheList; 
var s = t.TheString; 

Ma questo ha veramente solo beneficio nell'ambito di un metodo. Il compilatore può fornire IntelliSense per questo ed è fortemente digitato al momento della compilazione.

Oppure, se si vuole veramente andare tutti fuori, utilizzare ExpandoObject da System.Dynamic:

var expando = new ExpandoObject(); 
expando.List = new List<MyObject>(); 
expando.TheString = ""; 

Questo sarà riportata in linea senza alcun supporto di IntelliSense, e richiamerà il DLR. ExpandoObject utilizza semplicemente un IDictionary<string, object> sotto il cofano, quindi ...

var dict = (IDictionary<string, object>)expando; 

... è valido.

L'ultima opzione è una little tongue-in-cheek. Funzionerà, ma l'esperienza di sviluppo non è ideale rispetto ad altre opzioni. Detto questo, usiamo ExpandoObject nel nostro codice di test, ma non riesco a ricordare perché. Si può solo sperare che il ragionamento sia valido, ma è probabile che uno sviluppatore diventi stordito con nuovi giocattoli ...

+2

+1 stava per suggerirlo. – mellamokb

2

puoi ereditare l'Elenco e aggiungere semplicemente la tua proprietà, è un po 'più pulito rispetto al composito Elenco in un'altra classe

0

È possibile estendere un'implementazione di List con la classe Needless. In questo modo puoi ancora considerare la tua lista come una lista.

Problemi correlati