컬렉션 이니셜라이저는 컬렉션을 만들고 초기 값 집합으로 채울 수 있는 단축된 구문을 제공합니다. 컬렉션 이니셜라이저는 메뉴 옵션 또는 범주 목록, 숫자 값의 초기 집합, 일 또는 월 이름과 같은 문자열의 정적 목록 또는 유효성 검사에 사용되는 상태 목록과 같은 지리적 위치와 같은 알려진 값 집합에서 컬렉션을 만들 때 유용합니다.
컬렉션에 대한 자세한 내용은 컬렉션을 참조하세요.
키워드와 중괄호(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>이고 값의 형식이 Integer
인 String
을 생성합니다. 중첩된 각 값 목록은 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 메서드를 포함하여 컬렉션 이니셜라이저 사용을 활성화하는 방법을 보여 줍니다. |
참고하십시오
.NET