我想知道为什么我的列表出现此问题。
我正在尝试检索上一个索引的对象,所以-1;
这是一个好方法吗?
thePreviousList.Find(previousItem => previousItem.Id - 1);
答案 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)。