List.Find()问题

时间:2012-03-29 10:43:42

标签: c# list

我想知道为什么我的列表出现此问题。

我正在尝试检索上一个索引的对象,所以-1;

这是一个好方法吗?

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

4 个答案:

答案 0 :(得分:2)

不,最好的方法是使用索引:

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

但可能我误解了你的要求。

如果你想通过它的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];
}

答案 1 :(得分:0)

查找 适用于谓词(msdn

答案 2 :(得分:0)

这听起来像你想要的:

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

如果您确定该ID与列表中的索引匹配,则无需查看整个列表。

答案 3 :(得分:0)

根据你对Tim回答的评论来判断,你需要以下内容:

thePreviousList.ElementAt(thePreviousList.Count - 2);

请注意,-2是因为您的索引(由ElementAt使用)基于0(证明-1),然后您需要倒数第二个元素(另一个-1)。