IEnumerable.MoveNext() returns 正确但 IEnumerable.Current 引发 System.NullReferenceException
IEnumerable.MoveNext() returns True but IEnumerable.Current raises a System.NullReferenceException
我正在使用 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
。但是,最后一行 returns a System.NullReferenceException: Object reference not set to an instance of an object
我的代码有什么问题?我知道 mysearch
包含数据(我尝试在 MoveNext()
调用之后复制 foreach
循环,它工作正常)。有没有更简单的方法来访问我的搜索结果的特定元素?
GetEnumerator()
returns 一个 new 枚举器每次调用。无论你认为你在对它的调用做什么,你都没有在做。结果在每一行之后丢失,因为您没有保留枚举变量。
一般来说,C#是一种高级语言。尽量不要深入到手动循环处理的深度。你的foreach
很好。
要在 foreach 循环之外访问枚举的成员,LinQ 是最简单的方法:
var board = mySearch.Boards.FirstOrDefault(board => board.Name == "WhatImLookingFor");
我正在使用 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
。但是,最后一行 returns a System.NullReferenceException: Object reference not set to an instance of an object
我的代码有什么问题?我知道 mysearch
包含数据(我尝试在 MoveNext()
调用之后复制 foreach
循环,它工作正常)。有没有更简单的方法来访问我的搜索结果的特定元素?
GetEnumerator()
returns 一个 new 枚举器每次调用。无论你认为你在对它的调用做什么,你都没有在做。结果在每一行之后丢失,因为您没有保留枚举变量。
一般来说,C#是一种高级语言。尽量不要深入到手动循环处理的深度。你的foreach
很好。
要在 foreach 循环之外访问枚举的成员,LinQ 是最简单的方法:
var board = mySearch.Boards.FirstOrDefault(board => board.Name == "WhatImLookingFor");