C# - 获取列表中的倒数第二项

时间:2016-06-15 16:44:12

标签: c#

我有一些用C#编写的代码。在此代码中,我有一个List<KeyValuePair<int, string>> items。我试图获得列表中倒数第二个项目。我这样做有问题。

最初,我的收藏只是Dictionary<int, string>。那时,我正在使用:

var nextToLast = items.Reverse().Skip(1).FirstOrDefault();

那很有用。但是,由于items现在为List<KeyValuePair<int, string>,因此Reverse方法返回void。所以,我不能跳过。

任何人都知道我能用优雅的方式从C#中List<KeyValuePair<int, string>>获取倒数第二项吗?

我知道我可以使用循环。我只是认为必须有更好的方法。

4 个答案:

答案 0 :(得分:15)

试试这个:

items.AsEnumerable().Reverse().Skip(1).FirstOrDefault();

答案 1 :(得分:13)

您有一个List<>,为什么不使用它的Count和索引器属性:

var item = items[items.Count-2];

确保列表中至少有两个项目。

答案 2 :(得分:4)

您可以使用ElementAtOrDefault

items.ElementAtOrDefault(items.Count - 2) 

TakeLastOrDefault

items.Take(items.Length - 1).LastOrDefault();

答案 3 :(得分:2)

从C#8.0开始,您可以使用^运算符,该运算符使您可以从结尾[1]访问索引。

所以您可以这样做:

var item = items[^2];

更多示例:

int[] xs = new[] { 0, 10, 20, 30, 40 };
int last = xs[^1];
Console.WriteLine(last);  // output: 40

var lines = new List<string> { "one", "two", "three", "four" };
string prelast = lines[^2];
Console.WriteLine(prelast);  // output: three

string word = "Twenty";
Index toFirst = ^word.Length;
char first = word[toFirst];
Console.WriteLine(first);  // output: T