다음을 통해 공유


컬렉션 이니셜라이저(Visual Basic)

컬렉션 이니셜라이저는 컬렉션을 만들고 초기 값 집합으로 채울 수 있는 단축된 구문을 제공합니다. 컬렉션 이니셜라이저는 메뉴 옵션 또는 범주 목록, 숫자 값의 초기 집합, 일 또는 월 이름과 같은 문자열의 정적 목록 또는 유효성 검사에 사용되는 상태 목록과 같은 지리적 위치와 같은 알려진 값 집합에서 컬렉션을 만들 때 유용합니다.

컬렉션에 대한 자세한 내용은 컬렉션을 참조하세요.

키워드와 중괄호(From)를 사용하여 {} 컬렉션 이니셜라이저를 식별합니다. 이는 배열 섹션에서 설명된 배열 리터럴 구문과 유사합니다. 다음 예제에서는 컬렉션 이니셜라이저를 사용하여 컬렉션을 만드는 다양한 방법을 보여 줍니다.

' Create an array of type String().
Dim winterMonths = {"December", "January", "February"}

' Create an array of type Integer()
Dim numbers = {1, 2, 3, 4, 5}

' Create a list of menu options. (Requires an extension method
' named Add for List(Of MenuOption)
Dim menuOptions = New List(Of MenuOption) From {{1, "Home"},
                                                {2, "Products"},
                                                {3, "News"},
                                                {4, "Contact Us"}}

비고

C#은 컬렉션 이니셜라이저도 제공합니다. C# 컬렉션 이니셜라이저는 Visual Basic 컬렉션 이니셜라이저와 동일한 기능을 제공합니다. C# 컬렉션 이니셜라이저에 대한 자세한 내용은 개체 및 컬렉션 이니셜라이저를 참조하세요.

문법

컬렉션 이니셜라이저는 다음 코드와 같이 키워드 앞에 중괄호({})로 묶인 쉼표로 구분된 From 값 목록으로 구성됩니다.

Dim names As New List(Of String) From {"Christa", "Brian", "Tim"}

컬렉션을 생성할 때, 예를 들어 List<T> 또는 Dictionary<TKey,TValue>의 경우, 다음 코드와 같이 컬렉션 이니셜라이저 앞에 컬렉션 유형을 제공해야 합니다.

Public Class AppMenu
    Public Property Items As List(Of String) =
        New List(Of String) From {"Home", "About", "Contact"}
End Class

비고

컬렉션 이니셜라이저와 개체 이니셜라이저를 결합하여 동일한 컬렉션 개체를 초기화할 수는 없습니다. 개체 이니셜라이저를 사용하여 컬렉션 이니셜라이저에서 개체를 초기화할 수 있습니다.

컬렉션 이니셜라이저를 사용하여 컬렉션 만들기

컬렉션 이니셜라이저를 사용하여 컬렉션을 만들 때 컬렉션 이니셜라이저에 제공된 각 값은 컬렉션의 적절한 Add 메서드에 전달됩니다. 예를 들어 컬렉션 이니셜라이저를 List<T> 사용하여 만드는 경우 컬렉션 이니셜라이저의 각 문자열 값이 메서드에 Add 전달됩니다. 컬렉션 이니셜라이저를 사용하여 컬렉션을 만들려면 지정된 형식이 유효한 컬렉션 형식이어야 합니다. 유효한 컬렉션 형식의 예로는 IEnumerable<T> 인터페이스를 구현하거나 CollectionBase 클래스를 상속하는 클래스가 있습니다. 지정된 형식은 다음 조건을 충족하는 Add 메서드를 제공해야 합니다.

  • 컬렉션 이 Add 니셜라이저가 호출되는 범위에서 메서드를 사용할 수 있어야 합니다. 컬렉션의 비공개 메서드에 액세스할 수 있는 시나리오에서 컬렉션 이니셜라이저를 사용하는 경우, Add 메서드는 public일 필요가 없습니다.

  • 메서드는 Add 컬렉션 클래스의 인스턴스 멤버 또는 Shared 멤버이거나 확장 메서드여야 합니다.

  • 오버로드 해석 규칙에 따라 컬렉션 Add 초기값에 제공된 형식과 일치시킬 수 있는 메서드가 있어야 합니다.

예를 들어 다음 코드 예제에서는 컬렉션 이니셜라이저를 List(Of Customer) 사용하여 컬렉션을 만드는 방법을 보여줍니다. 코드를 실행하면 각 Customer 개체가 제네릭 목록의 메서드에 전달 Add(Customer) 됩니다.

Dim customers = New List(Of Customer) From
    {
        New Customer("City Power & Light", "http://www.cpandl.com/"),
        New Customer("Wide World Importers", "http://www.wideworldimporters.com/"),
        New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/")
    }

다음 코드 예제에서는 컬렉션 이니셜라이저를 사용하지 않는 해당 코드를 보여 있습니다.

Dim customers = New List(Of Customer) 
customers.Add(New Customer("City Power & Light", "http://www.cpandl.com/"))
customers.Add(New Customer("Wide World Importers", "http://www.wideworldimporters.com/"))
customers.Add(New Customer("Lucerne Publishing", "http://www.lucernepublishing.com/"))

컬렉션 Add 에 개체의 생성자와 Customer 일치하는 매개 변수가 있는 메서드가 있는 경우 다음 섹션에서 설명한 대로 컬렉션 이니셜라이저 내의 메서드에 대한 Add 매개 변수 값을 중첩할 수 있습니다. 컬렉션에 이러한 메서드가 Add 없는 경우 확장 메서드로 만들 수 있습니다. 메서드를 컬렉션의 확장 메서드로 만드는 Add 방법에 대한 예제는 방법: 컬렉션 이니셜라이저에서 사용되는 확장 메서드 추가 만들기를 참조하세요. 컬렉션 이니셜라이저와 함께 사용할 수 있는 사용자 지정 컬렉션을 만드는 방법에 대한 예제는 방법: 컬렉션 이니셜라이저에서 사용하는 컬렉션 만들기를 참조하세요.

중첩 컬렉션 이니셜라이저

컬렉션 이니셜라이저 내에 값을 중첩하여 생성되는 컬렉션에 대한 메서드의 Add 특정 오버로드를 식별할 수 있습니다. 메서드에 Add 전달된 값은 배열 리터럴 또는 컬렉션 이니셜라이저에서처럼 쉼표로 구분하고 중괄호({})로 묶어야 합니다.

중첩된 값을 사용하여 컬렉션을 만들면 중첩된 값 목록의 각 요소가 요소 형식과 일치하는 메서드에 Add 인수로 전달됩니다. 예를 들어, 다음 코드 예제에서는 키의 형식이 Dictionary<TKey,TValue>이고 값의 형식이 IntegerString을 생성합니다. 중첩된 각 값 목록은 Add에 대한 Dictionary 메서드와 일치합니다.

Dim days = New Dictionary(Of Integer, String) From
    {{0, "Sunday"}, {1, "Monday"}}

이전 코드 예제는 다음 코드와 동일합니다.

Dim days = New Dictionary(Of Integer, String)
days.Add(0, "Sunday")
days.Add(1, "Monday")

첫 번째 중첩 수준의 중첩된 값 목록만 컬렉션 형식에 Add 대한 메서드로 전송됩니다. 더 깊은 수준의 중첩은 배열 리터럴로 처리되며, 중첩된 값 목록은 어느 컬렉션의 메서드와도 Add 일치하지 않습니다.

제목 설명
방법: 컬렉션 이니셜라이저에서 사용하는 확장 추가 메서드 만들기 컬렉션 이니셜라이저의 값으로 컬렉션을 채우는 데 사용할 수 있는 확장 Add 메서드를 만드는 방법을 보여줍니다.
방법: 컬렉션 이니셜라이저에서 사용하는 컬렉션 만들기 Add를 구현하는 컬렉션 클래스에 IEnumerable 메서드를 포함하여 컬렉션 이니셜라이저 사용을 활성화하는 방법을 보여 줍니다.

참고하십시오