IEnumerable.MoveNext()返回True,但IEnumerable.Current引发System.NullReferenceException异常

时间:2016-10-03 10:17:05

标签: c# ienumerable ienumerator manatee.trello

我正在使用Manatee.Trello软件包构建一个C#应用程序来处理Trello的API。

我目前正在尝试获取搜索功能返回的第一个结果。 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包含数据(我尝试在foreach调用之后复制MoveNext()循环,它运行正常)。是否有更简单的方法来访问搜索结果的特定元素?

1 个答案:

答案 0 :(得分:4)

GetEnumerator()每次调用都会返回枚举数。无论你认为你正在做什么,你都没有这样做。每行后都会丢失结果,因为您不保留枚举变量。

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

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

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