Могу ли я «умножить» строку (в C #)? - PullRequest
121 голосов
/ 10 февраля 2009

Предположим, у меня есть строка, например,

string snip =  "</li></ul>";

Я хочу написать несколько раз, в зависимости от целочисленного значения.

string snip =  "</li></ul>";
int multiplier = 2;

// TODO: magic code to do this 
// snip * multiplier = "</li></ul></li></ul>";

EDIT: Я знаю, что могу легко написать свою собственную функцию для реализации этого, мне просто было интересно, есть ли какой-то странный строковый оператор, которого я не знал о

Ответы [ 13 ]

2 голосов
/ 10 февраля 2009
string Multiply(string input, int times)
{
     StringBuilder sb = new StringBuilder(input.length * times);
     for (int i = 0; i < times; i++)
     {
          sb.Append(input);
     }
     return sb.ToString();
}
0 голосов
/ 21 июля 2010

Вот мой взгляд на это только для дальнейшего использования:

    /// <summary>
    /// Repeats a System.String instance by the number of times specified;
    /// Each copy of thisString is separated by a separator
    /// </summary>
    /// <param name="thisString">
    /// The current string to be repeated
    /// </param>
    /// <param name="separator">
    /// Separator in between copies of thisString
    /// </param>
    /// <param name="repeatTimes">
    /// The number of times thisString is repeated</param>
    /// <returns>
    /// A repeated copy of thisString by repeatTimes times 
    /// and separated by the separator
    /// </returns>
    public static string Repeat(this string thisString, string separator, int repeatTimes) {
        return string.Join(separator, ParallelEnumerable.Repeat(thisString, repeatTimes));
    }
0 голосов
/ 10 февраля 2009

Хорошо, вот мое мнение по этому вопросу:

public static class ExtensionMethods {
  public static string Multiply(this string text, int count)
  {
    return new string(Enumerable.Repeat(text, count)
      .SelectMany(s => s.ToCharArray()).ToArray());
  }
}

Конечно, я немного глуповат, но когда мне нужно иметь табуляции в классах генерации кода, Enumerable.Repeat делает это для меня. И да, версия StringBuilder тоже подойдет.

...