У меня есть метод расширения, который я использую для строк, чтобы получить индексы подстроки, поскольку .Net предоставляет только IndexOf (один результат для первого совпадения подстроки).
public static class Extensions
{
public static int[] IndexesOf(this string str, string sub)
{
int[] result = new int[0];
for(int i=0; i < str.Length; ++i)
{
if(i + sub.Length > str.Length)
break;
if(str.Substring(i,sub.Length).Equals(sub))
{
Array.Resize(ref result, result.Length + 1);
result[result.Length - 1] = i;
}
}
return result;
}
}
Вы можете использовать метод расширения для всех экземпляров ключа для печати чего-либо
int[] indexes = stringWithKeys.IndexesOf("key");
foreach(int index in indexes)
{
// print something
}
Я знаю, что мой пример кода может быть самым длинным, но метод расширения можно использовать повторно, и вы можете поместить его в библиотеку типов "утилит" для дальнейшего использования.