Подтвердить что ты не робот

IEnumerable <объект> a = new IEnumerable <объект>(); Я могу это сделать?

Я хочу создать новый экземпляр объекта IEnumerable<object>

Я могу это сделать?

IEnumerable<object> a = new IEnumerable<object>();
4b9b3361

Ответ 1

Вы можете, например, создать экземпляр 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);

Ответ 2

Поскольку вы теперь указали, что хотите добавить к нему, вы не просто 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();

Ответ 3

Нет, вы не можете, так как IEnumerable - это интерфейс.

Вы должны иметь возможность создать пустой экземпляр большинства типов без интерфейса, которые реализуют IEnumerable, например: -

IEnumerable<object> a = new object[] { };

или

IEnumerable<object> a = new List<object>();

Ответ 5

Нет, вы не можете этого сделать. Вместо этого используйте следующую строку кода:

IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();

Надеюсь, это поможет.

Ответ 6

Я хотел создать новый перечислимый объект или список и быть в состоянии добавить к нему.

Этот комментарий меняет все. Вы не можете добавить общий IEnumerable<T>. Если вы хотите остаться с интерфейсами в System.Collections.Generic, вам нужно использовать класс, который реализует ICollection<T> как List<T>.

Ответ 7

Основная причина: мы не можем создать объект интерфейса, а IEnumerable - это интерфейс. Нам нужно создать объект класса, который реализует интерфейс. Это основная причина, по которой мы не можем напрямую создавать объект IEnumerable.

Ответ 8

Нет IEnumerable - это интерфейс, вы не можете создать экземпляр интерфейса

вы можете сделать что-то вроде этого

IEnumerable<object> a = new object[0];