¿Cómo puedo clonar una lista genérica en C#?
Tengo una lista genérica de objetos en C#, y deseo clonar la lista. Los elementos dentro de la lista son clonables, pero no parece haber una opción para hacer list.Clone()
.
¿Hay alguna manera fácil de evitar esto?
541
3
Si tus elementos son de tipo valor, entonces puedes hacer simplemente:
Sin embargo, si son tipos de referencia y quieres una copia profunda (asumiendo que tus elementos implementan correctamente
ICloneable
), podrías hacer algo como esto:Obviamente, sustituye
ICloneable
en los genéricos anteriores y castéalo con el tipo de elemento que implementaICloneable
.Si tu tipo de elemento no soporta
ICloneable
pero tiene un constructor de copias, puedes hacer esto en su lugar:Personalmente, evitaría
ICloneable
por la necesidad de garantizar una copia profunda de todos los miembros. En su lugar, sugeriría el constructor-copia o un método de fábrica comoSuTipo.CopiarDe(SuTipo elementoParaCopiar)
que devuelva una nueva instancia deSuTipo
.Cualquiera de estas opciones podría ser envuelta por un método (extensión o no).
Para obtener una copia superficial, puede utilizar el método GetRange de la clase genérica List.
Citado de: Recetas Genéricas
Si sólo te importan los tipos de valores...
Y conoces el tipo:
Si no conoces el tipo antes, necesitarás una función de ayuda:
El justo: