我想知道为什么我的列表中有这个问题。List.Find()问题
我试图检索以前的索引的对象,所以-1;
是这样的好办法吗?
thePreviousList.Find(previousItem => previousItem.Id - 1);
我想知道为什么我的列表中有这个问题。List.Find()问题
我试图检索以前的索引的对象,所以-1;
是这样的好办法吗?
thePreviousList.Find(previousItem => previousItem.Id - 1);
没有,最好的办法是使用索引:
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];
}
只有断言需要'(indexOfItem == 0)':) – stukselbax 2012-03-29 10:48:31
基本上我只是对象添加到我的名单有一个ID。然后当我加载页面时,我想检索不是列表中的最后一个对象,而是之前的对象。 – Kiwimoisi 2012-03-29 10:49:24
但是,订单改变时可能会改变。这听起来好像还有另一个更好的方法来处理你正在尝试的东西。依靠索引很少有效。 – 2012-03-29 10:57:35
查找 工程与谓词(msdn)
这听起来像你想:
if (currentItem.ID != 0)
{
var previousItem = list[currentItem.ID - 1];
// Use previous item...
}
else
{
// This was the first item in the list.
}
不需要遍历整个列表,如果你是肯定 ID匹配t中的索引他列出。
当我这样做PreviousItem theItem = new PreviousItem(); theItem = thePreviousList [countIdPrevious - 1]; previousFolderName = theItem.oldProjectName; previousFolderId = theItem.oldProjectId; – Kiwimoisi 2012-03-29 11:22:04
previsouFolderName和previousFolderId没有实现..? – Kiwimoisi 2012-03-29 11:22:22
@Emged:嗯,如果你还没有声明变量,你会如何期望它的工作?你为什么要创建一个'New PreviousItem()'然后立即扔掉它?这听起来似乎让你对C#如何开始工作感到困惑。 (如果这是你的downvote的方式,请你能解释一下吗?) – 2012-03-29 11:48:11
由你添的回答提出的意见来看,你想要的东西类似如下:
thePreviousList.ElementAt(thePreviousList.Count - 2);
注意,-2是因为你的索引(以ElementAt的使用)是基于0(即证明-1 ),然后你想要倒数第二个元素(另一个-1)。
上一个*索引*,或以前的* ID *?请给更多的上下文。 – 2012-03-29 10:46:58
上一页Id。至极也是在列表索引,因为它开始为0 – Kiwimoisi 2012-03-29 10:50:39