2012-03-29 61 views
1

我想知道为什么我的列表中有这个问题。List.Find()问题

我试图检索以前的索引的对象,所以-1;

是这样的好办法吗?

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

上一个*索引*,或以前的* ID *?请给更多的上下文。 – 2012-03-29 10:46:58

+0

上一页Id。至极也是在列表索引,因为它开始为0 – Kiwimoisi 2012-03-29 10:50:39

回答

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]; 
} 
+0

只有断言需要'(indexOfItem == 0)':) – stukselbax 2012-03-29 10:48:31

+0

基本上我只是对象添加到我的名单有一个ID。然后当我加载页面时,我想检索不是列表中的最后一个对象,而是之前的对象。 – Kiwimoisi 2012-03-29 10:49:24

+0

但是,订单改变时可能会改变。这听起来好像还有另一个更好的方法来处理你正在尝试的东西。依靠索引很少有效。 – 2012-03-29 10:57:35

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 2012-03-29 11:22:04

+0

previsouFolderName和previousFolderId没有实现..? – Kiwimoisi 2012-03-29 11:22:22

+0

@Emged:嗯,如果你还没有声明变量,你会如何期望它的工作?你为什么要创建一个'New PreviousItem()'然后立即扔掉它?这听起来似乎让你对C#如何开始工作感到困惑。 (如果这是你的downvote的方式,请你能解释一下吗?) – 2012-03-29 11:48:11

0

由你添的回答提出的意见来看,你想要的东西类似如下:

thePreviousList.ElementAt(thePreviousList.Count - 2); 

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