2016-10-03 1 views
2

Je crée une application C# en utilisant le package Manatee.Trello pour gérer l'API de Trello.IEnumerable.MoveNext() renvoie True mais IEnumerable.Current déclenche une exception System.NullReferenceException

J'essaie actuellement d'obtenir le premier résultat renvoyé par la fonction de recherche. L'élément Search.Boards implémente l'interface IEnumerable<Board>.

C'est ce que j'ai actuellement:

Search mySearch = new Search(SearchFor.IsOpen(), 100, SearchModelType.Boards); 
foreach (Board b in mySearch.Boards) { 
     Console.WriteLine("Board Name:{0} _ ID:{1}", b.Name, b.Id); 
} 
mySearch.Boards.GetEnumerator().Reset(); 
bool next=mySearch.Boards.GetEnumerator().MoveNext(); 
Console.WriteLine("MoveNext:{0}", next); 
Console.WriteLine("\nBoard Name:{0}", mySearch.Boards.GetEnumerator().Current.ToString()); 

La première boucle de foreach fonctionne très bien et affiche tous les conseils de mon utilisateur a accès. Console.WriteLine("MoveNext:{0}", next) fonctionne également et affiche MoveNext:True. Cependant, la dernière ligne renvoie un System.NullReferenceException: Object reference not set to an instance of an object

Quel est le problème avec mon code? Je sais mysearch contient des données (j'ai essayé de copier la boucle foreach juste après l'appel MoveNext(), et cela fonctionne très bien). Existe-t-il une méthode plus simple pour accéder à un élément spécifique de mon résultat de recherche?

Répondre

4

GetEnumerator() renvoie un nouveau nouvel énumérateur. Quoi que vous pensiez faire avec les appels, vous ne le faites pas. Le résultat est perdu après chaque ligne car vous ne conservez pas la variable d'énumérateur.

D'une manière générale, C# est un langage de haut niveau. Essayez de ne pas descendre dans les profondeurs de la gestion manuelle des boucles. Votre foreach va très bien.

Pour accéder aux membres d'une énumération en dehors d'une boucle foreach, LinQ est la meilleure façon:

var board = mySearch.Boards.FirstOrDefault(board => board.Name == "WhatImLookingFor"); 
+0

Merci pour l'explication. Cependant, comment puis-je obtenir un élément spécifique de mon énumérateur sans utiliser une boucle foreach? – Aserre

+0

@ Aserre J'ai ajouté un exemple LinQ. – nvoigt