2012-07-10 22 views
14

Eventuali duplicati:
Duplicate keys in .NET dictionaries?Esiste il dizionario <Key,Value> senza chiave univoca?

ho bisogno di creare un Collection<string,object>, uno è una stringa e un altro è un oggetto. Non posso usare Dizionario poiché nessuno degli articoli è unico.

C'è un modo per creare List<T,T>? Dal momento che non voglio creare un oggetto per contenere entrambi i valori solo per usarlo nel ciclo foreach singolo.

Grazie

+0

sarebbe un enum adatto alle tue esigenze? Non sono sicuro che vuoi che tu voglia raggiungere. – Freeman

+3

perché non è possibile creare il 'dizionario >'? –

+1

Elenco di KeyValuePair? http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx – dash

risposta

19

Prova List<Tuple<string, object>>. Quindi è possibile ottenere il consueto supporto linq nell'elenco per ottenere a ogni Tuple<string, object>.

Tuple<,> class è disponibile da .NET 4 in poi, ma è possibile imitare facilmente un tipo di tupla proprio senza troppi problemi.

Penso che le tuple siano considerate uguali in base ai loro valori degli articoli, ma con object questo sarebbe probabilmente un riferimento uguale e quindi non dovrebbe probabilmente essere uguale ... se ciò avesse senso!

Maggiori informazioni sulla parità qui:

Surprising Tuple (in)equality

Aggiornamento:

Se è necessario associare un elenco di elementi con una chiave ai fini di una ricerca, la risposta domanda duplicato evidenzia correttamente la classe Lookup (nel tuo caso, Lookup<string, object>), che esprimerebbe il tuo intento un po 'più chiaro di uno List<Tuple<string, object>>.

+1

Un avvertimento è che Tuple non è disponibile nelle versioni precedenti di .Net - è stato introdotto in .Net 4 – dash

+0

@dash Vero, ma una Tupla può essere implementata genericamente per versioni precedenti, molte persone avevano Tuple prima che venisse infornata. il modo in cui la domanda viene taggata in modo agnostico, quindi mi riservo il diritto di assumere l'ultima :-) grazie comunque per il chiarimento. –

+1

Il commento è per le altre persone che vedono la tua risposta - PowerCollections lo ha avuto per sempre :-) – dash

4

tenta di creare la classe personalizzata e utilizzarla

class KeyValue<Tkey,TValue> 
    { 
     public Tkey Key {get;set;} 
     public TValue Value {get;set;} 
    } 

uso come

List<KeyValue<string,string>> list = new List<KeyValue<string,string>>(); 
+0

Grazie, ho scritto io che voglio evitare di creare un nuovo tipo di oggetto. – eugeneK

6

è possibile utilizzare

List<KeyValuePair<string,object>> 

o

Dictionary<string,List<object>> 
3

Forse potresti creare una lista di tuple usando la classe Tuple? Qualcosa del genere:

List<Tuple<String, Object>> list = new List<Tuple<String, Object>>(); 
0

Hai considerato l'utilizzo di "Raggruppa per" e hai trasformato il risultato raggruppato in dizionario?

+0

Non sono sicuro che funzionerà in questo caso. – eugeneK

Problemi correlati