유형 IEnumerable<T>
이 이러한 작업을 지원하지 않습니다. IEnumerable<T>
인터페이스 의 목적은 소비자가 컬렉션의 내용을 볼 수 있도록하는 것입니다. 값을 수정하지 마십시오.
.ToList (). Add ()와 같은 작업을 수행하면 새 List<T>
목록을 만들고 해당 목록에 값을 추가합니다. 원본 목록에 연결되어 있지 않습니다.
할 수있는 작업은 확장 추가 방법을 사용하여 추가 IEnumerable<T>
된 값으로 새로 작성하는 것 입니다.
items = items.Add("msg2");
이 경우에도 원본 IEnumerable<T>
객체 는 수정되지 않습니다 . 참조를 보유하여 확인할 수 있습니다. 예를 들어
var items = new string[]{"foo"};
var temp = items;
items = items.Add("bar");
이 작업 집합 후에도 변수 temp는 값 집합에서 단일 요소 "foo"를 가진 열거 형 만 참조하지만 항목은 "foo"및 "bar"값을 가진 다른 열거 형을 참조합니다.
편집하다
나는 Add가 일반적인 확장 방법이 아니라는 것을 잊어 버렸습니다. IEnumerable<T>
왜냐하면 그것이 처음 정의하는 방법 중 하나이기 때문입니다. 여기있어
public static IEnumerable<T> Add<T>(this IEnumerable<T> e, T value) {
foreach ( var cur in e) {
yield return cur;
}
yield return value;
}
IEnumerable<T>
컬렉션 쿼리에만 사용됩니다. LINQ 프레임 워크의 중추입니다. 그것은 항상 같은 다른 콜렉션의 추상화Collection<T>
,List<T>
또는,Array
. 인터페이스는 한 번에 한 항목 씩 확장 모음을 걸을 수GetEnumerator
있는 인스턴스를 반환하는 메서드 만 제공합니다IEnumerator<T>
. LINQ 확장 방법은이 인터페이스에 의해 제한됩니다.IEnumerable<T>
여러 컬렉션의 일부 집합을 나타낼 수 있으므로 읽기 전용으로 설계되었습니다.