문제

정수 배열처럼 값 목록을 지정하여 arraylist를 채우고 싶지만 "add" 메서드를 반복적으로 호출하지 않고 그렇게 하는 방법을 잘 모르겠습니다.

예를 들어, arraylist에 { 1, 2, 3, "string1", "string2" }를 할당하고 싶습니다.다른 배열의 경우 다음과 같이 할당할 수 있다는 것을 알고 있습니다.

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

arraylist에 대해 이와 비슷한 방법이 있습니까?addrange 메서드를 시도했지만 중괄호 메서드는 ICollection 인터페이스를 구현하지 않습니다.

도움이 되었습니까?

해결책

배열 목록에는 Array 클래스에 의해 구현되는 ICollection을 허용하는 ctor가 있습니다.

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

다른 팁

사용 중인 C# 버전에 따라 다른 옵션이 있습니다.

C# 3.0에는 컬렉션 초기화 프로그램이 있습니다. 자세한 내용은 다음을 참조하세요. 스캇 구의 블로그

다음은 문제의 예입니다.

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

컬렉션 개체를 초기화하는 경우 대부분 AddRange와 유사한 구성 요소를 사용하는 생성자가 있습니다. 앞서 언급한 것처럼 이는 옵션이 아닐 수도 있습니다.

귀하의 의견은 귀하가 발견한 첫 번째 구성 요소이기 때문에 ArrayList를 선택했음을 암시합니다.

단순히 정수 목록을 찾고 있다고 가정하면 이것이 아마도 가장 좋은 방법일 것입니다.

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

그리고 C# 2.0(제네릭은 있지만 컬렉션 이니셜라이저는 없음)을 사용하는 경우.

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

이전 버전에서는 int[] 형식이 올바르지 않을 수 있지만 배열의 항목 수를 지정해야 할 수도 있습니다.

컬렉션 이니셜라이저가 있는 C# 3.0을 사용하지 않는다고 가정합니다.임시 배열 생성에 따른 오버헤드가 걱정되지 않는다면 1.1/2.0에서 다음과 같이 수행할 수 있습니다.

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

(내 자신의 질문에 대한 대답이지만 ...)

내가 원하는 것과 가장 가까운 것은 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);

이것은 내가 필요한 것에 충분하지만 다른 사람이 제안한 것처럼 임시 배열을 만들지 않고도 한 줄로 수행할 수 있기를 바랐습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top