개체의 새 인스턴스를 만들고 싶습니다. IEnumerable<object>
할 수 있나요?
IEnumerable<object> a = new IEnumerable<object>();
답변
예를 들어 List<object>
를 구현 하는의 인스턴스를 만들 수 있습니다 IEnumerable<object>
. 예:
List<object> list = new List<object>();
list.Add(1);
list.Add(4);
list.Add(5);
IEnumerable<object> en = list;
CallFunction(en);
답변
이제 추가하고 싶음을 지정 했으므로 원하는 것은 간단 IEnumerable<T>
하지 않지만 최소한 ICollection<T>
. 다음 List<T>
과 같이 사용하는 것이 좋습니다 .
List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
을 구현하기 IEnumerable<object>
때문에 예상되는 모든 곳에서 myList를 사용할 수 있습니다 .List<object>
IEnumerable<object>
(설명 이전의 답변)
IEnumerable<T>
일반 인터페이스이므로 인스턴스를 만들 수 없습니다 (때로는 기본 구현을 지정할 수 있지만 일반적으로 COM에서만 사용됨).
그래서 당신이 정말로 원하는 것은 인터페이스 를 구현 하는 클래스 를 인스턴스화하는 것 입니다. 동작은 선택한 클래스에 따라 다릅니다. IEnumerable<T>
빈 시퀀스의 경우 다음을 사용하십시오.
IEnumerable<object> e0=Enumerable.Empty<object>();
비어 있지 않은 열거 형의 경우 IEnumerable<T>
. 일반적인 선택은 배열입니다 T[]
, List<T>
당신이 변하지을 원하는 경우 나 ReadOnlyCollection<T>
.
IEnumerable<object> e1=new object[]{1,2,3};
IEnumerable<object> e2=new List<object>(){1,2,3};
IEnumerable<object> e3=new ReadOnlyCollection(new object[]{1,2,3});
구현하는 또 다른 일반적인 방법 IEnumerable<T>
은 IS 반복자 기능 C # 3에서 소개 :
IEnumerable<object> MyIterator()
{
yield return 1;
yield return 2;
yield return 3;
}
IEnumerable<object> e4=MyIterator();
답변
또 다른 해결책은 Empty
.
IEnumerable<object> a = Enumerable.Empty<object>();
그것에 대한 스레드가 있습니다 : IEnumerable을 초기화하기 위해 new List와 반대로 Enumerable.Empty ()를 사용하는 것이 더 낫습니까?
답변
아니 IEnumerable
인터페이스 이기 때문에 할 수 없습니다 .
를 구현하는 대부분의 비 인터페이스 유형의 빈 인스턴스를 만들 수 있어야합니다 IEnumerable
. 예 :-
IEnumerable<object> a = new object[] { };
또는
IEnumerable<object> a = new List<object>();
답변
아니요, 그렇게 할 수 없습니다. 대신 다음 코드 줄을 사용하십시오.
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
도움이되기를 바랍니다.
답변
새 열거 가능한 개체 또는 목록을 만들고 여기에 추가 할 수 있기를 원했습니다.
이 주석은 모든 것을 변경합니다. 일반 IEnumerable<T>
. 에서 인터페이스를 유지 System.Collections.Generic
하려면 다음 ICollection<T>
과 같이 구현하는 클래스를 사용해야합니다 List<T>
.
답변
주된 이유는 인터페이스의 객체를 생성 할 수없고 IEnumerable은 interface 입니다. 인터페이스를 구현하는 클래스의 객체를 생성해야합니다. 이것이 IEnumerable의 객체를 직접 생성 할 수없는 주된 이유입니다.