Voglio creare una nuova istanza di un oggetto IEnumerable<object>
Posso farlo?
IEnumerable<object> a = new IEnumerable<object>();
Voglio creare una nuova istanza di un oggetto IEnumerable<object>
Posso farlo?
IEnumerable<object> a = new IEnumerable<object>();
IEnumerable<T>. Devi usare qualcosa di simile List<T>.
IEnumerable<T>non rappresenta un iteratore - rappresenta una sequenza iterabile . IEnumerator<T>esso stesso rappresenta l'iteratore.
Risposte:
Ad esempio, puoi creare un'istanza di List<object>, che implementa IEnumerable<object>. Esempio:
List<object> list = new List<object>();
list.Add(1);
list.Add(4);
list.Add(5);
IEnumerable<object> en = list;
CallFunction(en);
IEnumerable<T>è una cattiva idea IMO.
Dato che ora hai specificato che vuoi aggiungere ad esso, quello che vuoi non è un semplice IEnumerable<T>ma almeno un file ICollection<T>. Consiglio semplicemente di usare un List<T>come questo:
List<object> myList=new List<object>();
myList.Add(1);
myList.Add(2);
myList.Add(3);
Puoi usare myList ovunque IEnumerable<object>sia previsto, poiché List<object>implementa IEnumerable<object>.
(vecchia risposta prima del chiarimento)
Non è possibile creare un'istanza di IEnumerable<T>poiché si tratta di un'interfaccia normale (a volte è possibile specificare un'implementazione predefinita, ma di solito viene utilizzata solo con COM).
Quindi quello che vuoi veramente è creare un'istanza di una classe che implementa l' interfaccia IEnumerable<T> . Il comportamento varia a seconda della classe scelta.
Per una sequenza vuota utilizzare:
IEnumerable<object> e0=Enumerable.Empty<object>();
Per un enumerabile non vuoto è possibile utilizzare una raccolta che implementa IEnumerable<T>. Le scelte comuni sono l'array T[], List<T>o se vuoi l'immutabilità 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});
Un altro modo comune di implementazione IEnumerable<T>è la funzionalità iteratore introdotta in C # 3:
IEnumerable<object> MyIterator()
{
yield return 1;
yield return 2;
yield return 3;
}
IEnumerable<object> e4=MyIterator();
Un'altra soluzione potrebbe essere quella di utilizzare Empty.
IEnumerable<object> a = Enumerable.Empty<object>();
c'è un thread su SO al riguardo: è meglio usare Enumerable.Empty () invece di new List per inizializzare un IEnumerable?
No, non puoi perché IEnumerableè un'interfaccia.
Dovresti essere in grado di creare un'istanza vuota della maggior parte dei tipi non di interfaccia che implementano IEnumerable, ad esempio: -
IEnumerable<object> a = new object[] { };
o
IEnumerable<object> a = new List<object>();
No, non puoi farlo. Utilizza invece la seguente riga di codice:
IEnumerable<int> usersIds = new List<int>() {1, 2, 3}.AsEnumerable();
Spero possa essere d'aiuto.
Volevo creare un nuovo oggetto o elenco enumerabile ed essere in grado di aggiungervi.
Questo commento cambia tutto. Non puoi aggiungere a un generico IEnumerable<T>. Se vuoi rimanere con le interfacce in System.Collections.Generic, devi usare una classe che implementa ICollection<T>come List<T>.
No IEnumerable è un'interfaccia, non è possibile creare istanze di interfaccia
puoi fare qualcosa di simile
IEnumerable<object> a = new object[0];
new SomeComInterface()istanzia la "CoClass" associata all'interfaccia piuttosto che istanziare l'interfaccia stessa?
newcon un'interfaccia in determinate situazioni.
Puoi farlo:
IEnumerable<object> list = new List<object>(){1, 4, 5}.AsEnumerable();
CallFunction(list);