C #: É atribuição ArrayList implícita possível?
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.
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.