2014-11-25 70 views
1

我有一個列表,可以說,在第一次通話10個項目:如何在變化列表中查找列表/數組的當前索引?

var myList = GetMyList(); 

還好現在我得到我從這個列表中選擇所需的項目:

myList.FirstOrDefault(x => x.Id == id); 

現在我去的網頁和做東西。

現在我回來了:如果通過我的API中的其餘呼叫停用任何內容,此列表可能已被更改。 (我重建構造當前列表中)

public OneItemFromMyList Get(int id) 
{ 
    //Here I need the next item in the list after the one with the above Id 
} 

那麼,如何獲取一個。我不想重複之前檢索到的一個,我不想移動到列表之外,所以如果我處於最後位置,我需要重新開始。

有什麼建議嗎?

+0

你你給一些示例數據? – 2014-11-25 03:14:01

回答

1

到了一個與特定id後,立即得到一個項目,這樣做:

var nextItem = myList.SkipWhile(x => x.Id != id).Take(2).LastOrDefault(); 

注意,這可能不會產生一個項目,如果任一下列條件爲真:

  • 該項目與x.Id == id不存在,或
  • 帶有x.Id == id的項目是列表中的最後一項。
+0

會留在數組的索引邊界嗎? – Robert 2014-11-25 03:16:18

+0

@Robert是的。如果'id'不存在,或者它是最後一個,它可能返回'null'。 – dasblinkenlight 2014-11-25 03:17:10

+0

你會如何繞過這個? – Robert 2014-11-25 03:17:21

1

我認爲這會爲你工作:

var nextId = 
    myList 
     .SkipWhile(x => x != id) //skip until x == id 
     .Skip(1) // but I don't want x == id so skip one more 
     .Concat(myList) // but item could be removed or I hit the end so restart 
     .First(); // the first item is the one I want!