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

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

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

' 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# 컬렉션 이니셜라이저에 대한 자세한 내용은 개체 및 컬렉션 이니셜라이저(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 메서드는 컬렉션 이니셜라이저가 호출되는 범위에서 사용할 수 있어야 합니다. 컬렉션의 public이 아닌 메서드에 액세스할 수 있는 시나리오에서 컬렉션 이니셜라이저를 사용할 경우에는 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 메서드를 컬렉션의 확장 메서드로 만드는 방법의 예제를 보려면 방법: 컬렉션 이니셜라이저에 사용되는 확장 추가 메서드 만들기(Visual Basic)를 참조하십시오. 컬렉션 이니셜라이저와 함께 사용할 수 있는 사용자 지정 컬렉션을 만드는 방법의 예제를 보려면 방법: 컬렉션 이니셜라이저에 사용되는 컬렉션 만들기(Visual Basic)를 참조하십시오.

컬렉션 이니셜라이저 중첩

만들고 있는 컬렉션에 대한 Add 메서드의 특정 오버로드를 식별하기 위해 컬렉션 이니셜라이저 내에서 값을 중첩시킬 수 있습니다. Add 메서드로 전달되는 값은 배열 리터럴이나 컬렉션 이니셜라이저에서와 같이 쉼표로 구분하고 중괄호({})로 묶어야 합니다.

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

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 메서드와 일치하지 않습니다.

참고 항목

작업

방법: 컬렉션 이니셜라이저에 사용되는 확장 추가 메서드 만들기(Visual Basic)

방법: 컬렉션 이니셜라이저에 사용되는 컬렉션 만들기(Visual Basic)

방법: Visual Basic에서 배열 변수 초기화

방법: 항목 목록 만들기

참조

New 연산자(Visual Basic)

개념

Visual Basic의 배열

개체 이니셜라이저: 명명된 형식과 익명 형식(Visual Basic)

자동 구현 속성(Visual Basic)

지역 형식 유추(Visual Basic)

익명 형식(Visual Basic)

Visual Basic의 LINQ 소개