2016-10-03 50 views
2

我正在构建一个使用Manatee.Trello包处理Trello API的C#应用​​程序。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()); 

第一foreach循环工作正常,并显示所有我的用户可以访问板。 Console.WriteLine("MoveNext:{0}", next)也适用,并显示MoveNext:True。但是,最后一行返回一个System.NullReferenceException: Object reference not set to an instance of an object

我的代码有什么问题?我知道mysearch包含数据(我试图在MoveNext()调用后复制foreach循环,并且它工作正常)。有没有更简单的方法来访问我的搜索结果的特定元素?

回答

4

GetEnumerator()返回一个新的枚举器每次调用。无论你认为自己在打电话时做什么,你都没有这样做。每行后面的结果都会丢失,因为您不保留枚举变量。

一般来说,C#是一种高级语言。尽量不要深入到手动循环处理的深处。你的foreach就好了。

要访问一个枚举成员foreach循环之外,LinQ将是最简单的方法:

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

感谢您的解释。但是,如何在不使用foreach循环的情况下获取枚举数的特定元素? – Aserre

+0

@Aserre我加了一个LinQ的例子。 – nvoigt