Queue를 List랑 동일하게 초기화 시키고 싶었다.
예상과는 다르게 에러가 발생.
List를 초기화하는 방식처럼 Queue도 초기화 될줄 알았는데 당연하게 될줄 알았던 부분이 작동하지 않았다.
List<int> L1 = new List<int> { 1, 2, 3 };
Queue<int> Q1 = new Queue<int> { 1, 2, 3 }; // error 발생
컬렉션 이니셜라이저(Collection initializers)
컬렉션 이니셜라이저를 사용하면 컬렉션 타입을 초기화할 때 하나 또는 그 이상의 요소 이니셜라이저를 지정해서 초기화 할 수 있다. 단 IEnumerable을 구현하고 적절한 시그니처가 있는 Add를 인스턴스 메서드 또는 확장 메서드로 포함해야 한다. 요소 이니셜라이저는 단순한 값, 식 또는 개체 이니셜라이저일 수 있다. 컬렉션 이니셜라이저를 사용하면 여러 호출을 지정할 필요가 없습니다. 컴파일러는 호출을 자동으로 추가합니다.
List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
List<int> digits2 = new List<int> { 0 + 1, 12 % 3, MakeInt() };
List<Cat> cats = new List<Cat>
{
new Cat{ Name = "Sylvester", Age=8 },
new Cat{ Name = "Whiskers", Age=2 },
new Cat{ Name = "Sasha", Age=14 }
};
Queue 생성자 초기화 하기
queue는 Add 메서드를 포함하고 있지 않기 때문에 컬렉션 이니셜라이저를 사용할 수 없다.
초기화 할 때는 아래와 같이 초기화 해주자.
// Create a new queue from an integer array
Queue<int> myQueue = new Queue<int>(new int[] { 1, 2, 3, 4, 5 });
직접 Queue에 Add 메서드 추가하기
Add 메서드가 필요하다고 하니 확장 메서드를 이용해서 Queue에 Add 메서드를 추가해보자
public static class MyExtensions
{
public static void Add<T>(this Queue<T> queue, T item)
{
queue.Enqueue(item);
}
}
List<int> L1 = new List<int> { 1, 2, 3 };
Queue<int> Q1 = new Queue<int> { 1, 2, 3 };
이제 에러가 나지 않는다. Queue에도 컬렉션 이니셜라이저를 사용할 수 있게 되었다!
참조 사이트
'프로그래밍 > C#' 카테고리의 다른 글
C# 무명 메서드(Anonymous Method) (4) | 2023.08.02 |
---|---|
C# 7.0 튜플(Tuple) (6) | 2023.07.27 |
C# virtual 키워드 (24) | 2023.07.05 |
C# 식 본문 멤버(Expression-bodied member) (4) | 2023.06.28 |
C# where 제네릭 형식 제약(generic type constraint) (6) | 2023.06.28 |
댓글