namespace generic collection colecciones c# collections

generic - namespace collection c#



TamaƱo fijo a la lista (3)

Para la perspectiva de declaración se permite lo siguiente

IList<string> list= new string[3]; list.Add("Apple"); list.Add("Manago"); list.Add("Grapes");

1) Se compila bien, pero en tiempo de ejecución me aparece el error "Collection was of fixed size" . Por supuesto, la colección crece dinámicamente por tamaño, ¿por qué el declarante aceptó tal declaración?

2) ¿Cuáles son las diferentes listas que puedo asignar a IList? Ejemplo

IList<string> fruits=new List<string>();

Aquí estoy asignando Lista a IList, ¿Cuáles son las diversas clases de colección que puedo asignar a IList?


@Jake: En realidad, una cadena [] se puede convertir en un archivo IList ... pero no puedes AGREGARLO.

Si desea rellenar previamente la lista, puede usar algo como:

IList<string> list= new string[3] { "Apple", "Mango", "Grapes" };

¿Pero entonces cuál es el punto de convertirlo en un IList? Todavía no se pudo agregar a eso. Si realmente es una lista de tamaño fijo, entonces conviértala en una cadena []. De lo contrario, conviértalo en una lista (), como sugiere Jake.


Cuando llama a list.Add, está intentando insertar un elemento al final de su matriz. Las matrices son una colección de tamaño fijo, por lo que no puede hacer una adición. En su lugar, tendrá que asignar las entradas a través del indexador:

list[0] = "a"; list[1] = "b"; list[2] = "c";


El problema subyacente aquí es que System.Array viola el principio de sustitución al implementar IList<T> . Un tipo System.Array tiene un tamaño fijo que no se puede cambiar. El método Add en IList<T> está destinado a agregar un nuevo elemento a la colección subyacente y aumentar su tamaño en 1. Esto no es posible para un System.Array y, por lo tanto, se lanza.

Lo que System.Array realmente quiere implementar aquí es un estilo de solo lectura IList<T> . Desafortunadamente, no existe tal tipo en el marco y, por lo tanto, implementa la siguiente mejor cosa: IList<T> .

En cuanto a la pregunta sobre qué tipos se pueden asignar a IList<T> , hay algunos que incluyen: ReadOnlyCollection<T> y Collection<T> . La lista es demasiado larga para poner aquí. La mejor manera de verlo todo es abrir IList<T> en el reflector y buscar tipos derivados de IList<T> .