我有一些用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>>
获取倒数第二项吗?
我知道我可以使用循环。我只是认为必须有更好的方法。
答案 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)
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