J'ai un objet IEnumerable. Je voudrais accéder basé sur l'index par exemple:Comment accéder à l'index dans l'objet IEnumerable en C#?
for(i=0; i<=Model.Products; i++)
{
???
}
Est-ce possible?
J'ai un objet IEnumerable. Je voudrais accéder basé sur l'index par exemple:Comment accéder à l'index dans l'objet IEnumerable en C#?
for(i=0; i<=Model.Products; i++)
{
???
}
Est-ce possible?
var myProducts = Models.Products.ToList();
for(i=0; i< myProducts.Count ; i++)
{
//myProducts[i];
}
ne devrait-il pas être i
et aussi beaware que .ToList() est en train de créer une nouvelle liste en mémoire. Est-ce que ça en vaut la peine (tout ce gaspillage juste pour avoir un index?) – Nestor
C'est assez méchant. Donc, s'il y a 10 000 produits, et qu'il a besoin du 5ème, vous lui dites de charger d'abord tous les 10k en mémoire, juste pour éliminer les 9.554 dont il n'aura pas besoin? –
Il n'y a pas d'index dans IEnumerator. Utilisez
foreach(var item in Model.Products)
{
...item...
}
vous pouvez faire votre propre index si vous voulez:
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.
...
}
Tout d'abord, êtes-vous sûr qu'il est vraiment IEnumerator
et non IEnumerable
? Je soupçonne fortement que c'est en fait le dernier.
En outre, la question n'est pas entièrement claire. Avez-vous un index, et vous voulez obtenir un objet à cet index? Si oui, et si bien que vous avez un IEnumerable
(non IEnumerator
), vous pouvez le faire:
using System.Linq;
...
var product = Model.Products.ElementAt(i);
Si vous voulez énumérer toute la collection, mais veulent aussi avoir un index pour chaque élément, puis VA » s ou les réponses de Nestor sont ce que vous voulez.
La meilleure façon de récupérer un élément par index est de référencer votre collection dénombrable avec un tableau en utilisant Linq de cette façon:
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' est une chose tout à fait raisonnable de vouloir obtenir le index d'un article de. – Servy
@Servy IEnumerator jumelé avec IEnumerable, besoin d'ajouter IEnumerable dans le cadre de la question – Avram
@Avram Non, vous * n'avez pas besoin de. Il est libre de demander à propos de celui qu'il veut poser. Il a choisi de poser des questions sur 'IEnumerator', ce qui est une très bonne question à poser. Ce n'est pas parce que ce n'est pas la question à laquelle vous voulez répondre/que vous avez répondu que vous devriez changer cette question. – Servy