Adi*_*dil 27
您可以使用索引器获取所需索引的元素.将一个添加到索引将使您接下来并从索引中减去一个将为您提供前一个元素.
int index = 4;
int prev = list[index-1];
int next = list[index+1];
Run Code Online (Sandbox Code Playgroud)
您将不得不检查下一个和上一个索引是否存在,否则您将获得IndexOutOfRangeException异常.由于List是基于零的索引,因此第一个元素将具有索引0,第二个元素将具有索引1,依此类推.
if(index - 1 > -1)
prev = list[index-1];
if(index + 1 < list.Length)
next = list[index+1];
Run Code Online (Sandbox Code Playgroud)
Bar*_*aro 19
在一行中使用 LINQ 并进行循环搜索:
下一个
YourList.SkipWhile(x => x != NextOfThisValue).Skip(1).DefaultIfEmpty( YourList[0] ).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
上一个
YourList.TakeWhile(x => x != PrevOfThisValue).DefaultIfEmpty( YourList[YourList.Count-1]).LastOrDefault();
Run Code Online (Sandbox Code Playgroud)
这是一个工作示例(链接到小提琴)
List<string> fruits = new List<string> {"apple", "banana", "orange", "raspberry", "kiwi"};
string NextOf = "orange";
string NextOfIs;
NextOfIs = fruits.SkipWhile(x => x!=NextOf).Skip(1).DefaultIfEmpty(fruits[0]).FirstOrDefault();
Console.WriteLine("The next of " + NextOf + " is " + NextOfIs);
NextOf = "kiwi";
NextOfIs = fruits.SkipWhile(x => x!=NextOf).Skip(1).DefaultIfEmpty(fruits[0]).FirstOrDefault();
Console.WriteLine("The next of " + NextOf + " is " + NextOfIs);
string PrevOf = "orange";
string PrevOfIs;
PrevOfIs = fruits.TakeWhile(x => x!=PrevOf).DefaultIfEmpty(fruits[fruits.Count-1]).LastOrDefault();
Console.WriteLine("The prev of " + PrevOf + " is " + PrevOfIs);
PrevOf = "apple";
PrevOfIs = fruits.TakeWhile(x => x!=PrevOf).DefaultIfEmpty(fruits[fruits.Count-1]).LastOrDefault();
Console.WriteLine("The prev of " + PrevOf + " is " + PrevOfIs);
Run Code Online (Sandbox Code Playgroud)
另外,如果您想要具有循环逻辑的紧凑解决方案而不创建新列表,您可以使用以下代码:
int nextNumber = list[(list.IndexOf(currentNumber) + 1) % list.Count];
int previousNumber = list[(list.IndexOf(currentNumber) - 1 + list.Count) % list.Count];
Run Code Online (Sandbox Code Playgroud)
https://dotnetfiddle.net/PkP2Jy
List<int> listInts = new List<int>();
listInts.AddRange(new int[] { 1, 3, 5, 7, 9, 13 });
int index = listInts.IndexOf(3); //The index here would be "1"
index++; //Check first if the index is in the length
int element = listInts[index]; //element = 5
Run Code Online (Sandbox Code Playgroud)
以下可能会有所帮助
int NextValue = 0;
int PreviousValue =0;
int index = lstOfNo.FindIndex(nd =>nd.Id == 9);
var Next = lstOfNo.ElementAtOrDefault(index + 1);
var Previous = lstOfNo.ElementAtOrDefault(index - 1);
if (Next != null)
NextValue = Next;
if (Previous != null)
PreviousValue = Previous;
Run Code Online (Sandbox Code Playgroud)
我已经通过继承.Net列表实现了这一点
public class NavigationList<T> : List<T>
{
private int _currentIndex = 0;
public int CurrentIndex
{
get
{
if (_currentIndex > Count - 1) { _currentIndex = Count - 1; }
if (_currentIndex < 0) { _currentIndex = 0; }
return _currentIndex;
}
set { _currentIndex = value; }
}
public T MoveNext
{
get { _currentIndex++; return this[CurrentIndex]; }
}
public T MovePrevious
{
get { _currentIndex--; return this[CurrentIndex]; }
}
public T Current
{
get { return this[CurrentIndex]; }
}
}
Run Code Online (Sandbox Code Playgroud)
使用它变得非常容易
NavigationList<string> n = new NavigationList<string>();
n.Add("A");
n.Add("B");
n.Add("C");
n.Add("D");
Assert.AreEqual(n.Current, "A");
Assert.AreEqual(n.MoveNext, "B");
Assert.AreEqual(n.MovePrevious, "A");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
50101 次 |
| 最近记录: |