Я хочу создать новый экземпляр объекта 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>, это плохая идея, ИМО.
Поскольку теперь вы указали, что хотите добавить к нему, то, что вам нужно, не просто, 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>подобные 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);