Я хочу створити новий екземпляр об'єкта IEnumerable<object>
Чи можу я це зробити?
IEnumerable<object> a = new IEnumerable<object>();
Я хочу створити новий екземпляр об'єкта IEnumerable<object>
Чи можу я це зробити?
IEnumerable<object> a = new IEnumerable<object>();
IEnumerable<T>. Ви повинні використовувати щось на зразок List<T>.
IEnumerable<T>не представляє ітератор - він представляє послідовність, що повторюється . IEnumerator<T>сам представляє ітератор.
Відповіді:
Наприклад, ви можете створити екземпляр 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>є поганою ідеєю IMO.
Оскільки ви зараз вказали, що хочете додати до нього, те, що ви хочете, не є простим, IEnumerable<T>але принаймні ICollection<T>. Я рекомендую просто використовувати List<T>такий:
List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
Ви можете використовувати myList скрізь, де IEnumerable<object>очікується, оскільки це 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>є функція ітератора, представлена в 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>();
про це є нитка на SO: чи краще використовувати Enumerable.Empty () на відміну від нового списку для ініціалізації IEnumerable?
Ні, ви не можете, оскільки 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>like List<T>.
Жоден IEnumerable не є інтерфейсом, ви не можете створити екземпляр інтерфейсу
Ви можете зробити щось подібне
IEnumerable<object> a = new object[0];
new SomeComInterface()екземплярів, пов'язаних з інтерфейсом, "CoClass", а не створення самого інтерфейсу?
newінтерфейс у певних ситуаціях.
Ви можете зробити це:
IEnumerable<object> list = new List<object>(){1, 4, 5}.AsEnumerable();
CallFunction(list);