Quiero crear una nueva instancia de un objeto IEnumerable<object>
¿Puedo hacer esto?
IEnumerable<object> a = new IEnumerable<object>();
Quiero crear una nueva instancia de un objeto IEnumerable<object>
¿Puedo hacer esto?
IEnumerable<object> a = new IEnumerable<object>();
IEnumerable<T>. Tienes que usar algo como List<T>.
IEnumerable<T>no representa un iterador, representa una secuencia iterable . IEnumerator<T>en sí mismo representa el iterador.
Respuestas:
Por ejemplo, puede crear una instancia de List<object>, que implementa IEnumerable<object>. Ejemplo:
List<object> list = new List<object>();
list.Add(1);
list.Add(4);
list.Add(5);
IEnumerable<object> en = list;
CallFunction(en);
IEnumerable<T>es una mala idea, en mi opinión.
Como ahora especificó que desea agregarle, lo que desea no es simple, IEnumerable<T>sino al menos un ICollection<T>. Recomiendo simplemente usar un List<T>como este:
List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
Puede usar myList en cualquier lugar donde IEnumerable<object>se espere, ya que List<object>implements IEnumerable<object>.
(respuesta anterior antes de aclaración)
No puede crear una instancia de IEnumerable<T>ya que es una interfaz normal (a veces es posible especificar una implementación predeterminada, pero generalmente se usa solo con COM).
Entonces, lo que realmente desea es crear una instancia de una clase que implemente la interfaz IEnumerable<T> . El comportamiento varía según la clase que elija.
Para una secuencia vacía use:
IEnumerable<object> e0=Enumerable.Empty<object>();
Para un enumerable no vacío, puede usar alguna colección que implemente IEnumerable<T>. Las opciones comunes son la matriz T[], List<T>o si desea inmutabilidad 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});
Otra forma común de implementar IEnumerable<T>es la característica de iterador introducida en C # 3:
IEnumerable<object> MyIterator()
{
yield return 1;
yield return 2;
yield return 3;
}
IEnumerable<object> e4=MyIterator();
Otra solución sería utilizar Empty.
IEnumerable<object> a = Enumerable.Empty<object>();
hay un hilo en SO al respecto: ¿Es mejor usar Enumerable.Empty () en lugar de la nueva Lista para inicializar un IEnumerable?
No, no puedes, ya que IEnumerablees una interfaz.
Debería poder crear una instancia vacía de la mayoría de los tipos que no son de interfaz que implementan IEnumerable, por ejemplo: -
IEnumerable<object> a = new object[] { };
o
IEnumerable<object> a = new List<object>();
No, no puedes hacer eso. Utilice la siguiente línea de código en su lugar:
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
Espero que ayude.
No IEnumerable es una interfaz, no puede crear una instancia de interfaz
puedes hacer algo como esto
IEnumerable<object> a = new object[0];
new SomeComInterface()crea una instancia del "CoClass" asociado a la interfaz en lugar de crear una instancia de la interfaz en sí?
newcon una interfaz en ciertas situaciones.
Puedes hacerlo:
IEnumerable<object> list = new List<object>(){1, 4, 5}.AsEnumerable();
CallFunction(list);