Это простой и не вложенный более 1 уровня способ.
Здесь будет найдено первое совпадение. Если совпадений не найдено, indexes
будет иметь счет 0 после цикла. Поместите в метод по вашему выбору.
List<int> indexes = new List<int>();
for (int i = 0; i < items.Count; i++)
{
string temp = items[i];
while (temp.Length < match.Length && temp == match.Substring(0, temp.Length) && i < items.Count - 1)
{
indexes.Add(i + 1); // example was given using 1-based
temp += items[++i];
}
if (temp == match)
{
indexes.Add(i + 1);
break; // at this point, indexes contains the values sought
}
indexes.Clear();
}
Со списком из 10000 элементов, где элементы для поиска находятся в конце, это выполняется примерно за 0,0003775 секунд.