var texts = new[] { "A", "B", "C", "X", "D", };

for (int i = 0; i < texts.Count(); i++)
{
  if (texts[i] == "X") { break; }
  Console.WriteLine(string.Format("{0}番目の要素は{1}", i, texts[i]));
}

 ↓ こうしたらいかんのか?

texts.TakeWhile(foo => foo != "X").Select((foo, bar) => Tuple.Create(foo, bar)).ToList().ForEach(foo => Console.WriteLine(string.Format("{0}番目の要素は{1}", foo.Item2, foo.Item1)));