2016-10-03 3 views
2

Я создаю приложение C#, используя пакет Manatee.Trello для обработки API Trello.IEnumerable.MoveNext() возвращает True, но IEnumerable.Current вызывает System.NullReferenceException

В настоящее время я пытаюсь получить первый результат, возвращаемый функцией поиска. Элемент Search.Boards реализует интерфейс IEnumerable<Board>.

Это то, что я в настоящее время:

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()); 

Первый цикл Еогеасп работает отлично и отображает все доски мой пользователь имеет доступ. Console.WriteLine("MoveNext:{0}", next) также работает и отображает MoveNext:True. Однако последняя строка возвращает System.NullReferenceException: Object reference not set to an instance of an object

Что не так с моим кодом? Я знаю, что mysearch содержит данные (я попытался скопировать цикл foreach сразу после вызова MoveNext(), и он отлично работает). Есть ли более простой способ доступа к определенному элементу моего результата поиска?

ответ

4

GetEnumerator() возвращает новый перечислитель каждый звонок. Что бы вы ни думали, что делаете с призывами к нему, вы этого не делаете. Результат теряется после каждой строки, потому что вы не храните переменную перечислителя.

Вообще говоря, C# является языком высокого уровня. Попытайтесь не спускаться в глубину обработки ручного контура. Ваш foreach в порядке.

Чтобы получить доступ к членам перечисления вне цикла Еогеасп, LinQ это самый простой способ:

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

Спасибо за пояснения. Однако как я могу получить конкретный элемент моего счетчика без использования цикла foreach? – Aserre

+0

@Aserre Я добавил пример LinQ. – nvoigt