我有List<string>
喜欢:
List<String> lsRelation = new List<String>{"99","86","111","105"}.
现在我想找到数字111,它是倒数第二个字符串。
所以我尝试过:
String strSecondLast=lsrelation.Last() - 2;
哪个不起作用。那么如何使用Last()
找到List的倒数第二个元素。
答案 0 :(得分:8)
如果您知道具有索引器的&{39}和IList<T>
:
string secondLast = null;
if (lsRelation.Count >= 2)
secondLast = lsRelation[lsRelation.Count - 2];
您可以创建如下的扩展程序:
public static T SecondLast<T>(this IEnumerable<T> items)
{
if (items == null) throw new ArgumentNullException("items");
IList<T> list = items as IList<T>;
if (list != null)
{
int count = list.Count;
if (count > 1)
{
return list[count - 2];
}
else
throw new ArgumentException("Sequence must contain at least two elements.", "items");
}
else
{
try
{
return items.Reverse().Skip(1).First();
} catch (InvalidOperationException)
{
throw new ArgumentException("Sequence must contain at least two elements.", "items");
}
}
}
然后你可以这样使用它:
string secondLast = lsRelation.SecondLast();
答案 1 :(得分:8)
使用:
if (lsRelation.Count >= 2)
secLast = lsRelation[lsRelation.Count - 2];
答案 2 :(得分:6)
这样做有很多选择。只提一个我还没见过的人:
List<string> lsRelation = new List<String>{"99","86","111","105"};
String strSecondLast = lsRelation.Skip(lsRelation.Count()-2).First();
答案 3 :(得分:5)
您可以使用ElementAt(list.Count - 2)
:
List<String> lsRelation = new List<String> { "99", "86", "111", "105" };
Console.WriteLine(lsRelation.ElementAt(lsRelation.Count - 2)); // 111
答案 4 :(得分:5)
从 C#8.0 开始,您可以使用Index
来访问相对于序列结尾的元素:
if (lsRelation.Count >= 2)
secLast = lsRelation[^2];
有关更多信息,请参见docs
答案 5 :(得分:3)
您无法使用Last()
执行此操作。试试这个。你取列表的长度并减去2:
if (lsRelation.Count >= 2)
{
var item = lsRelation[lsRelation.Count - 2];
}
修改强>
根据评论,这是一个使用Last()
方法的示例,使用起来很荒谬:
if (lsRelation.Count >= 2)
{
var item = lsRelation.Last(x => x == lsRelation[lsRelation.Count - 2]);
}