Dovrai fare una copia, ma probabilmente è una buona cosa. In C# 2, il codice corrente è quasi il più pulito possibile. Sarebbe migliorato costruendo direttamente la tua lista dai tuoi valori (List<MyType> list = new List<MyType>(valueCollection);
), ma sarà comunque necessaria una copia.
utilizzando LINQ con C# 3, tuttavia, si sarebbe in grado di fare:
myDictionary.Values.ToList();
Detto questo, non vorrei (probabilmente) cercare di evitare la copia. Restituire una copia dei tuoi valori tende ad essere più sicuro, poiché impedisce al chiamante di causare problemi nel tentativo di modificare la tua raccolta. Restituendo una copia, il chiamante può eseguire list.Add(...)
o list.Remove(...)
senza causare problemi di classe.
Edit: Dato il tuo commento qui sotto, se invece si è un IEnumerable<T>
con un conte, si può semplicemente tornare ICollection<T>
. Questo è direttamente implementato da ValueCollection
, il che significa che si può semplicemente restituire i valori del vostro dizionario direttamente, senza la copia:
private ICollection<MyType> ConvertToList(Dictionary<int, MyType>.ValueCollection valueCollection)
{
return valueCollection;
}
(Certo, questo metodo diventa davvero inutile in questo caso - ma volevo dimostrare per tu ...)
fonte
2010-03-29 19:12:19
Ogni soluzione pubblicata fino ad ora richiede la copia dell'intera collezione. ** Leggi la domanda **. – SLaks
@SLaks: l'ho indirizzato direttamente nella mia risposta ... (che comunque comporta la copia, però) –
C'è qualche rilevanza per il keyType "int", o è un tipo arbitrario? –