Я хочу создать новый экземпляр объекта IEnumerable<object>
Я могу это сделать?
IEnumerable<object> a = new IEnumerable<object>();
Я хочу создать новый экземпляр объекта 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);
Вы можете использовать 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>
является функция итератора, представленная на С# 3:
IEnumerable<object> MyIterator()
{
yield return 1;
yield return 2;
yield return 3;
}
IEnumerable<object> e4=MyIterator();
Нет, вы не можете, так как IEnumerable
- это интерфейс.
Вы должны иметь возможность создать пустой экземпляр большинства типов без интерфейса, которые реализуют IEnumerable
, например: -
IEnumerable<object> a = new object[] { };
или
IEnumerable<object> a = new List<object>();
Другое решение было бы использовать Empty
.
IEnumerable<object> a = Enumerable.Empty<object>();
на SO есть тема: лучше ли использовать Enumerable.Empty(), а не новый List для инициализации IEnumerable?
Нет, вы не можете этого сделать. Вместо этого используйте следующую строку кода:
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
Надеюсь, это поможет.
Я хотел создать новый перечислимый объект или список и быть в состоянии добавить к нему.
Этот комментарий меняет все. Вы не можете добавить общий IEnumerable<T>
. Если вы хотите остаться с интерфейсами в System.Collections.Generic
, вам нужно использовать класс, который реализует ICollection<T>
как List<T>
.
Основная причина: мы не можем создать объект интерфейса, а IEnumerable - это интерфейс. Нам нужно создать объект класса, который реализует интерфейс. Это основная причина, по которой мы не можем напрямую создавать объект IEnumerable.
Нет IEnumerable - это интерфейс, вы не можете создать экземпляр интерфейса
вы можете сделать что-то вроде этого
IEnumerable<object> a = new object[0];