2

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

我目前正在尝试获取 Search 函数返回的第一个结果。该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()是否有更简单的方法来访问我的搜索结果的特定元素?

4

1 回答 1

4

GetEnumerator()每次调用都返回一个的枚举器。无论你认为你对它的调用在做什么,你都没有在做。结果在每一行之后都会丢失,因为您没有保留 enumerator 变量。

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

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

var board = mySearch.Boards.FirstOrDefault(board => board.Name == "WhatImLookingFor");
于 2016-10-03T11:55:50.520 回答