FindIndex・FindLastIndexメソッドを使ってListから条件に合致する要素のインデックスを取得する(ラムダ式版、C# 3.0以降)
using System;
using System.Collections.Generic;
using System.Linq;

class Sample {
  static void Main()
  {
    List<string> list = new List<string>() {"Alice", "Bob", "Charlie", "Dave", "Eve"};

    // "ve"で終わるもののうち、最初の要素のインデックス
    Console.WriteLine("FindIndex: {0}", list.FindIndex(s => s.EndsWith("ve")));

    // "ve"で終わるもののうち、最後の要素のインデックス
    Console.WriteLine("FindLastIndex: {0}", list.FindLastIndex(s => s.EndsWith("ve")));

    // "ve"で終わるもののうち、最初の要素のインデックス
    // (Select+Firstメソッドを使ったFindIndexとの比較)
    Console.WriteLine("Select+First: {0}", list.Select((s, index) => new {Element = s, Index = index}).First(e => e.Element.EndsWith("ve")).Index);

    // "ve"で終わるもののうち、最後の要素のインデックス
    // (Select+Lastメソッドを使ったFindLastIndexとの比較)
    Console.WriteLine("Select+Last: {0}", list.Select((s, index) => new {Element = s, Index = index}).Last(e => e.Element.EndsWith("ve")).Index);
  }
}
実行結果
FindIndex: 3
FindLastIndex: 4
Select+First: 3
Select+Last: 4

比較として、LINQのSelectメソッドFirstメソッドLastメソッドを使った場合についても併記しています。 なお、要素が見つからなかった場合は例外InvalidOperationExceptionがスローされるため、必要に応じて実装を書き換える必要があります。