Asp.net 如何执行列表上的上一项和下一项<;G>;

Asp.net 如何执行列表上的上一项和下一项<;G>;,asp.net,list,Asp.net,List,我有一个名为Person的类,它包含各种属性,如名字、姓氏等 我有一个包含n个Person实例的列表 List<Person> lstPerson = new List<Person>(); 有没有比我上面提到的更好的方法呢?我不喜欢上述解决方案,因为我必须在构建人员列表时构建上一个和下一个指针 您可以执行以下操作: int personIndex = lstPerson.FindIndex(delegate(Person o) { return o.FirstName

我有一个名为Person的类,它包含各种属性,如名字、姓氏等

我有一个包含n个Person实例的列表

List<Person> lstPerson = new List<Person>();

有没有比我上面提到的更好的方法呢?我不喜欢上述解决方案,因为我必须在构建人员列表时构建上一个和下一个指针

您可以执行以下操作:

int personIndex = lstPerson.FindIndex(delegate(Person o) { return o.FirstName == "Joe" });
Person p = lstPerson[personIndex];
// verify that personIndex+1 and personIndex-1 still fall within the list
Person prevPerson = lstPerson[personIndex-1];
Person nextPerson = lstPerson[personIndex+1];

嗯。。为什么不简单地使用?
它附带了下一个和上一个内置元素。

您可以这样做,即跳过元素,直到下一个元素匹配或已浏览整个列表:

var list = (new List<Person>() { null }).Concat(lstPerson);
var p = list.SkipWhile((x, index) => { var n = list.ElementAtOrDefault(index + 1); return n == null || n.FirstName != name; }).Take(3);

Person previous = p.FirstOrDefault();
Person person = p.ElementAtOrDefault(1);
Person next = p.ElementAtOrDefault(2);

简单而优雅!我很惭愧地承认,我甚至不知道FindIndex()方法在那里,我应该知道,因为我经常使用Find()和FindAll()。
var list = (new List<Person>() { null }).Concat(lstPerson);
var p = list.SkipWhile((x, index) => { var n = list.ElementAtOrDefault(index + 1); return n == null || n.FirstName != name; }).Take(3);

Person previous = p.FirstOrDefault();
Person person = p.ElementAtOrDefault(1);
Person next = p.ElementAtOrDefault(2);
Person person = lstPerson.Find(p => p.FirstName == name);
Person previous = null;
Person next = null;

if (person != null)
{
    int index = lstPerson.IndexOf(person);
    previous = lstPerson.ElementAtOrDefault(index - 1);
    next = lstPerson.ElementAtOrDefault(index + 1);
}