Pergunta

Eu gostaria de preencher um ArrayList, especificando uma lista de valores assim como eu faria uma matriz de inteiros, mas tenho certeza de como fazê-lo sem repetidos apelos ao "add" método.

Por exemplo, eu quero atribuir {1, 2, 3, "string1", "string2"} a um ArrayList. Eu sei que para outras matrizes que você pode fazer a atribuição como:

int[] IntArray = {1,2,3};

Existe uma maneira semelhante a fazer isso por um ArrayList? Tentei o método AddRange mas o método chaveta não implementa a interface ICollection.

Foi útil?

Solução

lista Array tem ctor que aceita ICollection, que é implementado pela classe Array.

object[] myArray = new object[] {1,2,3,"string1","string2"};
ArrayList myArrayList = new ArrayList(myArray);

Outras dicas

Dependendo da versão do C # você está usando, você tem diferentes opções.

C # 3.0 tem inicializadores de recolha, em pormenor Blog do Scott Gu

Aqui está um exemplo do seu problema.

ArrayList list = new ArrayList {1,2,3};

E se você está inicializando um objeto de coleção, a maioria tem construtores que levam componentes semelhantes aos AddRange, embora novamente como você mencionou isso pode não ser uma opção.

Seus comentários implica que você escolheu ArrayList porque foi o primeiro componente que você encontrou.

Assumindo que você está simplesmente à procura de uma lista de números inteiros, esta é provavelmente a melhor maneira de fazer isso.

List<int> list = new List<int>{1,2,3};

E se você estiver usando C # 2.0 (que tem os genéricos, mas não inicializadores de coleção).

List<int> list = new List<int>(new int[] {1, 2, 3});

Embora o formato int [] pode não estar correto em versões mais antigas, você pode ter que especificar o número de itens na matriz.

Eu suponho que você não está usando C # 3.0, que tem inicializadores de coleção. Se você não está preocupado com a sobrecarga de criar uma matriz temp, você poderia fazê-lo como este em 1.1 / 2.0:

ArrayList list = new ArrayList(new object[] { 1, 2, 3, "string1", "string2"});

(espécie de responder a minha própria pergunta, mas ...)

A coisa mais próxima que eu encontrei para o que eu quero é fazer uso do método ArrayList.Adapter:

object[] values = { 1, 2, 3, "string1", "string2" };
ArrayList AL = new ArrayList();
AL = ArrayList.Adapter(values);

//or during intialization
ArrayList AL2 = ArrayList.Adapter(values);

Isto é suficiente para o que eu preciso, mas eu estava esperando que poderia ser feito em uma linha sem criar a matriz temporária como alguém tinha sugerido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top