Tendrá que hacer una copia, pero esto probablemente sea algo bueno. En C# 2, tu código actual es casi el más limpio que puedes hacer. Se mejoraría al construir directamente la lista de sus valores (List<MyType> list = new List<MyType>(valueCollection);
), pero aún se requerirá una copia.
mediante LINQ con C# 3, sin embargo, que sería capaz de hacer:
myDictionary.Values.ToList();
Dicho esto, yo no (probablemente) tratar de evitar la copia. Devolver una copia de sus valores tiende a ser más seguro, ya que evita que la persona que llama cause problemas si intentan modificar su colección. Al devolver una copia, la persona que llama puede hacer list.Add(...)
o list.Remove(...)
sin causar problemas en su clase.
Editar: Teniendo en cuenta su comentario a continuación, si lo que quieres es un IEnumerable<T>
con un conde, sólo puede volver ICollection<T>
. Este se directamente ejecutados por ValueCollection
, lo que significa que sólo puede devolver valores de su diccionario directamente, sin copiar:
private ICollection<MyType> ConvertToList(Dictionary<int, MyType>.ValueCollection valueCollection)
{
return valueCollection;
}
(Por supuesto, este método se convierte realmente inútil en este caso - pero quería demostrar que para usted ...)
Cada solución publicada hasta el momento implica copiar toda la colección. **Lea la pregunta**. – SLaks
@SLaks: me dirigí a esto directamente en mi respuesta ... (que todavía implica la copia, sin embargo) –
¿Hay alguna relevancia para el tipo de clave "int", o es un tipo arbitrario? –