Как насчет этого метода расширения:
public static IEnumerable<int> IndexesOf(this string haystack, string needle)
{
int lastIndex = 0;
while (true)
{
int index = haystack.IndexOf(needle, lastIndex);
if (index == -1)
{
yield break;
}
yield return index;
lastIndex = index + needle.Length;
}
}
Обратите внимание, что при поиске "AA" в "XAAAY" этот код теперь будет давать только 1.
Если вам действительно нужен массив, вызовите ToArray()
для результата. (Это предполагает .NET 3.5 и, следовательно, поддержку LINQ.)