2012-03-29 15 views
1

なぜこのリストにこの問題があるのでしょうか?List.Find()issue

前のインデックスのオブジェクトを取得しようとしています。

これは良い方法ですか?

var item = thePreviousList[indexofItem]; 
var previousItem = thePreviousList[indexofItem -1]; 

しかし、おそらく私はあなたの条件を誤解しました:

thePreviousList.Find(previousItem => previousItem.Id - 1); 
+1

前へ*インデックス*、またはそれ以前* ID *?もっと文脈を与えてください。 –

+0

前のID。 – Kiwimoisi

答えて

2

はありません、最善の方法は、インデックスを使用することです。

あなたはそれのIDでアイテムを検索する場合(それはこの特性を持っていると仮定して):

var idToFind=4711; 
var thisIndex = thePreviousList.Where((i, index) => i.ID==idToFind) 
        .Select((i, index) => index).FirstOrDefault(); 
if(thisIndex > 0) 
{ 
    var previousItem = thePreviousList[thisIndex - 1]; 
} 
+0

'(indexOfItem == 0)'のためにアサーションだけが必要です:) – stukselbax

+0

基本的に私はIDを持つリストにオブジェクトを追加するだけです。そして、私はページを読み込むときに、リストの最後のオブジェクトではなく直前のオブジェクトを取得したいと思います。 – Kiwimoisi

+0

しかし、注文が変更されると変更される可能性があります。これは、あなたがしようとしているもののための別の、より良いアプローチがあるように聞こえる。インデックスに依存することはほとんどありません。 –

0

を述語と 作品を検索したいようですね:

if (currentItem.ID != 0) 
{ 
    var previousItem = list[currentItem.ID - 1]; 
    // Use previous item... 
} 
else 
{ 
    // This was the first item in the list. 
} 

の場合は、IDがtのインデックスと一致することを確認してください。彼はリストする。

+0

私はこれを行うときPreviousItem theItem = new PreviousItem(); theItem = thePreviousList [countIdPrevious - 1]; previousFolderName = theItem.oldProjectName; previousFolderId = theItem.oldProjectId; – Kiwimoisi

+0

previsouFolderNameとpreviousFolderIdは実装されていません..? – Kiwimoisi

+0

@Emged:あなたが変数を宣言していないのであれば、どのように動作すると思いますか?そしてなぜあなたは '新しいPreviousItem()'を作成してすぐにそれを放棄していますか? C#がどうやってどうやって始めるのか多少混乱しているように思えます。 (これが途中でダウンボトムだった場合、あなたはそれを説明できますか?) –

0

あなたはティムの答えに作られたコメントから判断すると、次のような何かをしたい:

thePreviousList.ElementAt(thePreviousList.Count - 2); 

注-2(ElementAtで使用される)あなたのインデックスが0基づいているためである(つまり、正当化することを-1 )そして最後から2番目の要素(別の-1)が必要です。