Как найти второй последний элемент из списка?

У меня есть List<string> как:

 List<String> lsRelation = new List<String>{"99","86","111","105"}.

Теперь я хочу найти номер 111, который является второй до последней строки.

Итак, я пробовал:

String strSecondLast=lsrelation.Last() - 2;

который не работает. Итак, как я могу найти второй для последнего элемента списка с помощью Last().

Ответ 1

Использование:

if (lsRelation.Count >= 2)
    secLast = lsRelation[lsRelation.Count - 2];

Ответ 2

Если вы знаете, что 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();

Ответ 3

Есть много вариантов для этого. Просто упомянуть, что я еще не видел здесь:

List<string> lsRelation = new List<String>{"99","86","111","105"};
String strSecondLast = lsRelation.Skip(lsRelation.Count() - 2).First();

Ответ 4

Вы можете использовать ElementAt(list.Count - 2):

List<String> lsRelation = new List<String> { "99", "86", "111", "105" };
Console.WriteLine(lsRelation.ElementAt(lsRelation.Count - 2)); // 111

Ответ 5

Вы не можете сделать это, используя Last(). Попробуй это. Вы берете длину списка и вычитаете 2:

if (lsRelation.Count >= 2)
{
    var item = lsRelation[lsRelation.Count - 2];
}

Edit:

На основе комментария здесь приведен пример использования метода Last(), который будет нелепо использовать:

if (lsRelation.Count >= 2)
{
    var item = lsRelation.Last(x => x == lsRelation[lsRelation.Count - 2]);
}