IEnumerable a = new IEnumerable (); могу ли я это сделать?



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


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

332   8  
c#

8 ответов:

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

так что вы действительно хотите создать экземпляр a класс что реализует интерфейс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();

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

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

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

или

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

другое решение было бы использовать Empty.

IEnumerable<object> a = Enumerable.Empty<object>();

есть нить на так об этом:лучше использовать Enumerable.Пустой() в отличие от нового списка для инициализации IEnumerable?

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

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

Я надеюсь, что это помогает.

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

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

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

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

вы можете сделать что-то подобное

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

Comments

    Ничего не найдено.