Chcę utworzyć nową instancję obiektu IEnumerable<object>
Mogę to zrobić?
IEnumerable<object> a = new IEnumerable<object>();
Chcę utworzyć nową instancję obiektu IEnumerable<object>
Mogę to zrobić?
IEnumerable<object> a = new IEnumerable<object>();
IEnumerable<T>. Musisz użyć czegoś takiego List<T>.
IEnumerable<T>nie reprezentuje iteratora - reprezentuje iterowalną sekwencję. IEnumerator<T>sama reprezentuje iterator.
Odpowiedzi:
Możesz na przykład utworzyć instancję programu List<object>, który implementuje IEnumerable<object>. Przykład:
List<object> list = new List<object>();
list.Add(1);
list.Add(4);
list.Add(5);
IEnumerable<object> en = list;
CallFunction(en);
IEnumerable<T>jest złym pomysłem IMO.
Ponieważ teraz określiłeś, że chcesz do niego dodać, to, co chcesz, nie jest proste, IEnumerable<T>ale przynajmniej ICollection<T>. Polecam po prostu użycie List<T>takiego:
List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
Możesz używać myList wszędzie tam, gdzie jest IEnumerable<object>to oczekiwane, ponieważ List<object>implementuje IEnumerable<object>.
(stara odpowiedź przed wyjaśnieniem)
Nie można utworzyć instancji programu, IEnumerable<T>ponieważ jest to normalny interfejs (czasami można określić domyślną implementację, ale jest ona zwykle używana tylko z COM).
Więc to, czego naprawdę chcesz, to utworzenie instancji klasy, która implementuje interfejs IEnumerable<T> . Zachowanie różni się w zależności od wybranej klasy.
W przypadku pustej sekwencji użyj:
IEnumerable<object> e0=Enumerable.Empty<object>();
W przypadku niepustej wyliczalnej można użyć kolekcji, która implementuje IEnumerable<T>. Powszechne wybory są tablica T[], List<T>lub jeśli chcesz niezmienność 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});
Innym typowym sposobem implementacji IEnumerable<T>jest funkcja iteratora wprowadzona w C # 3:
IEnumerable<object> MyIterator()
{
yield return 1;
yield return 2;
yield return 3;
}
IEnumerable<object> e4=MyIterator();
Innym rozwiązaniem byłoby użycie Empty.
IEnumerable<object> a = Enumerable.Empty<object>();
na SO jest na ten temat wątek: Czy lepiej jest użyć Enumerable.Empty () w przeciwieństwie do new List do zainicjowania IEnumerable?
Nie, nie możesz, ponieważ IEnumerablejest to interfejs.
Powinieneś być w stanie utworzyć pustą instancję większości typów nieinterfejsowych, które implementują IEnumerable, np .: -
IEnumerable<object> a = new object[] { };
lub
IEnumerable<object> a = new List<object>();
Nie, nie możesz tego zrobić. Zamiast tego użyj następującego wiersza kodu:
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
Mam nadzieję, że to pomoże.
Chciałem utworzyć nowy wyliczalny obiekt lub listę i móc do niego dodawać.
Ten komentarz zmienia wszystko. Nie możesz dodać do ogólnego IEnumerable<T>. Jeśli chcesz pozostać przy interfejsach w programie System.Collections.Generic, musisz użyć klasy, która implementuje ICollection<T>taką jak List<T>.
Żaden IEnumerable nie jest interfejsem, nie można utworzyć wystąpienia interfejsu
możesz zrobić coś takiego
IEnumerable<object> a = new object[0];
new SomeComInterface()tworzy instancję powiązaną z interfejsem „CoClass” zamiast tworzenia instancji samego interfejsu?
neww pewnych sytuacjach można używać interfejsu.
Możesz to zrobić:
IEnumerable<object> list = new List<object>(){1, 4, 5}.AsEnumerable();
CallFunction(list);