¿Cuál es la mejor manerade lograr esto en C#?Convertir de Array para iCollection <T>
Respuesta
Las matrices de T se pueden asignar a ICollection de T, como una matriz de implementos T IList de T. IList of T se extiende a la colección de T, por lo que puede simplemente asignar una matriz a ICollection.
class Foo {}
Foo [] foos = new Foo [12];
ICollection<Foo> foo_collection = foos;
¿Está diciendo que, básicamente, no es necesario * convertir * porque Array ya * es * una ICollection? –
Además de la respuesta y el comentario, si quieres ir a otro manera, se utiliza el método ToArray()
en IEnumerable<T>
(que desciende de ICollection<T>
).
Respuesta corta:
Uso ToList(). No confíe en que T[]
se puede asignar al ICollection<T>
a menos que sepa lo siguiente y sepa lo que está haciendo.
Si lo necesita solo lectura, es mejor utilizar Array.AsReadOnly(T[])
y evitar la copia adicional, y también evitar los problemas que se detallan a continuación.
respuesta detallada:
Aunque gama de T (. Es decir T[]
) técnicamente implementa IList<T>
(y ICollection<T>
y IEnumerable<T>
), se no realmente implementar los enteros IList<T>
y ICollection<T>
interfaces de , como se menciona in the documentation:
... Lo más importante a tener en cuenta cuando lanza una matriz a una de estas interfaces es que los miembros que agregan, insertan o eliminan elementos lanzan
NotSupportedException
.
En otras palabras, si usted acaba de convertir la matriz de ICollection<T>
obtendrá NotSupportedException
tan pronto como se llama a cualquiera de los métodos antes mencionados.
Así que la mejor manera de convertir una matriz segura a un ICollection<T>
sería la creación de un nuevo objeto, como el uso de Linq
's ToList()
:
T[] array;
// Will create a new list based on the current contents of the array
ICollection<T> collection = array.ToList();
Esta es la respuesta mucho mejor, aceptado realmente no menciona el "peligro" de fundición a estos sin cuidado. –
Entonces, si sé que no voy a modificar la colección, ¿es seguro lanzar ICollection
@DanielLorenz si lo quiere como de solo lectura, es mejor hacer cumplir con ['Array.AsReadOnly (T [])'] (https://docs.microsoft.com/en-us/dotnet/api/system. array.asreadonly? view = netframework-4.7 # System_Array_AsReadOnly__1 ___ 0___) – sinelaw
- 1. Parámetros de función: IEnumerable, ICollection o array?
- 2. ICollection vs ICollection <T> - La ambigüedad entre ICollection <T> .Count y ICollection.Count
- 3. ICollection <string> a la cadena []
- 4. Visualizador de depuración para cualquier ICollection e ICollection <T> tipos
- 5. Ruby - Diferencia entre Array # << y Array # push
- 6. ¿Hay un pedido de ICollection <T>?
- 7. Convertir Numpy Array a OpenCV Array
- 8. Java API para convertir Array en CSV
- 9. while (<@array>) efectos para perl
- 10. ¿Está bien para devolver una lista interna <T> como IEnumerable <T> o ICollection <T>?
- 11. bytes Convertir [] para ArrayList <Object>
- 12. Convertir Java Array a Iterable
- 13. Convertir numpy array en tupla
- 14. Detectando si el tipo implementa ICollection <T>
- 15. ICollection <T> .Contains sobre tipos personalizados
- 16. Clase base abstracta que hereda ICollection <T>
- 17. C# Expandir lista plana <T> al diccionario <T, ICollection <int>>
- 18. Problemas para convertir el conjunto de enteros a int [] array
- 19. const boost :: array <T,N> o boost :: array <const T,N>?
- 20. Convert Array para JSON
- 21. ICollection <T> Vs List <T> en Entity Framework
- 22. cómo serializar propiedad de tipo ICollection <T> durante el uso de Entity Framework
- 23. ¿Cómo puedo convertir String [] para arrayList <String>
- 24. Convertir array MD5 a String java
- 25. ruby rails convertir params a int array
- 26. ¿Por qué ICollection <T> implementar tanto IEnumerable <T> y IEnumerable
- 27. Dado un array [a1b2c3d4] convertir a [abcd1234]
- 28. PowerShell convertir Char Array a la cadena
- 29. ASP.NET MVC - Problema con EditorTemplate para ICollection <T> asignada a Enum
- 30. Agregar a una ICollection
No hay conversión, una gran variedad de implementos T ICollection. –
Thorarin
Las matrices no implementan 'ICollection' de forma segura; consulte [answer] (http://stackoverflow.com/a/12100850/562906). –
sinelaw