[c#] IEnumerable <개체> a = 새 IEnumerable <개체> (); 할 수 있나요?

개체의 새 인스턴스를 만들고 싶습니다. 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의 객체를 직접 생성 할 수없는 주된 이유입니다.