Ho un oggetto IEnumerable. Vorrei accedere in base all'indice per esempio:Come accedere all'indice in oggetto IEnumerable in C#?
for(i=0; i<=Model.Products; i++)
{
???
}
È possibile?
Ho un oggetto IEnumerable. Vorrei accedere in base all'indice per esempio:Come accedere all'indice in oggetto IEnumerable in C#?
for(i=0; i<=Model.Products; i++)
{
???
}
È possibile?
var myProducts = Models.Products.ToList();
for(i=0; i< myProducts.Count ; i++)
{
//myProducts[i];
}
non dovrebbe essere
e anche beaware che .ToList() sta creando un nuovo elenco in memoria. Ne vale la pena (tutto ciò che spreca solo per avere un indice?) – Nestor
Questo è piuttosto cattivo. Quindi se ci sono 10.000 prodotti e ha bisogno del quinto, gli dici di caricare prima tutti i 10k in memoria, solo per scartare i 9.554 di cui non avrà bisogno? –
Nessun indice in IEnumerator. Utilizzare
foreach(var item in Model.Products)
{
...item...
}
è possibile rendere il proprio indice, se si desidera:
int i=0;
foreach(var item in Model.Products)
{
... item...
i++;
}
foreach(var indexedProduct in Model.Products.Select((p, i)=> new {Product = p, Index = i})
{
...
...indexedProduct.Product...
...indexProduct.Index ...//this is what you need.
...
}
Prima di tutto, sei sicuro che sia davvero IEnumerator
e non IEnumerable
? Sospetto fortemente che in realtà sia quest'ultimo.
Inoltre, la domanda non è del tutto chiara. Hai un indice e vuoi ottenere un oggetto in quell'indice? Se è così, e se davvero si dispone di un IEnumerable
(non IEnumerator
), si può fare questo:
using System.Linq;
...
var product = Model.Products.ElementAt(i);
Se si desidera enumerare l'intera collezione, ma vogliono anche avere un indice per ogni elemento, quindi VA' Le risposte di Nestor sono ciò che desideri.
Il modo migliore per recuperare un elemento in base all'indice di riferimento è la tua raccolta enumerabile con un array usando Linq in questo modo:
using System.Linq;
...
class Model {
IEnumerable<Product> Products;
}
...
// Somewhere else in your solution,
// assume model is an instance of the Model class
// and that Products references a concrete generic collection
// of Product such as, for example, a List<Product>.
...
var item = model.Products.ToArray()[index];
@Avram Un 'IEnumerator' è una cosa del tutto ragionevole vuole ottenere il indice di un oggetto di. – Servy
@Servy IEnumerator accoppiato con IEnumerable, è necessario aggiungere IEnumerable come parte della domanda – Avram
@Avram No, * non * è necessario. È libero di chiedere di chi vuole chiedere. Ha scelto di chiedere "IEnumerator", che è una domanda perfettamente valida da chiedere. Solo perché non è la domanda a cui vorresti rispondere/avere risposta non significa che dovresti cambiare questa domanda. – Servy