2016-10-03 10 views
2

TreateのAPIを処理するためにManatee.Trelloパッケージを使用して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にデータが含まれていることを知っています(私はコールの直後にforeachループをコピーしようとしました。検索結果の特定の要素にアクセスする簡単な方法はありますか?

答えて

4

GetEnumerator()新しい電話番号が返されます。あなたがそれを呼び出して何をしていると思いますが、あなたはそれをやっていません。列挙子変数を保持しないため、各行の後に結果が失われます。

一般に、C#は高水準言語です。手動のループ処理の深さに落とさないようにしてください。 foreachは問題ありません。説明のための

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

ありがとう:

は、foreachループの外に列挙のメンバーにアクセスするには、LINQが最も簡単な方法です。しかし、foreachループを使用せずに列挙子の特定の要素を取得するにはどうすればよいですか? – Aserre

+0

@Aserre LinQの例を追加しました。 – nvoigt

関連する問題