Независимо от того, можете ли вы сделать это однострочным (можно), оно всегда будет вызывать создание нескольких строк из-за неизменности String
в .NET
Если вы хотите сделать это несколько эффективно, без создания нескольких строк, вы можете использовать StringBuilder
. Метод расширения также может быть полезен для упрощения использования.
public static class StringExtensions
{
public static string MultiInsert(this string str, string insertChar, params int[] positions)
{
StringBuilder sb = new StringBuilder(str.Length + (positions.Length*insertChar.Length));
var posLookup = new HashSet<int>(positions);
for(int i=0;i<str.Length;i++)
{
sb.Append(str[i]);
if(posLookup.Contains(i))
sb.Append(insertChar);
}
return sb.ToString();
}
}
Обратите внимание, что этот пример инициализирует StringBuilder
до правильной длины вперед, поэтому избегая необходимости увеличивать StringBuilder.
Использование: "abcdefg012345".MultiInsert("-",2,5); // yields "abc-def-g012345"
Живой пример: http://rextester.com/EZPQ89741