Это оператор присваивания в Паскале и часто используется в доказательствах и псевдокоде. Это то же, что и =
на языках C-диалектов.
Исторически в документах по информатике использовались =
для сравнений сравнений и ←
для присвоений. Паскаль использовал :=
, чтобы встать на жесткую левую стрелку. C пошел в другом направлении и вместо этого решил использовать операторы =
и ==
.
Что относительно этого:
string tabs = new String('\t', n);
, Где n
количество раз, Вы хотите повторить строку.
Или лучше:
static string Tabs(int n)
{
return new String('\t', n);
}
Лучшая версия должна, конечно, использовать встроенный путь:
string Tabs(int len) { return new string('\t', len); }
Из других решений, предпочтите самое легкое; только если это оказывается слишком медленным, боритесь за более эффективное решение.
, Если Вы используете Ерунда: конечно, вышеупомянутый код более эффективен. StringBuilder
и знаете его получающуюся длину заранее, тогда также, используйте соответствующего конструктора, это намного более эффективно, потому что это означает, что только одно трудоемкое выделение происходит, и никакое ненужное копирование данных.
Что относительно того, чтобы использовать дополнительный метод?
<час>public static class StringExtensions
{
public static string Repeat(this char chatToRepeat, int repeat) {
return new string(chatToRepeat,repeat);
}
public static string Repeat(this string stringToRepeat,int repeat)
{
var builder = new StringBuilder(repeat*stringToRepeat.Length);
for (int i = 0; i < repeat; i++) {
builder.Append(stringToRepeat);
}
return builder.ToString();
}
}
<час> Вы могли затем записать:
Debug.WriteLine('-'.Repeat(100)); // For Chars
Debug.WriteLine("Hello".Repeat(100)); // For Strings
Примечание, что тест производительности использования stringbuilder версии для простых символов вместо строк дает Вам главный проступок производительности: на моем компьютере разница в mesured производительности 1:20 между: Отладка. WriteLine ('-'.Repeat (1000000))//символьная версия и
Отладка. WriteLine (" - ".Repeat (1000000))//представляют версию
Ответ действительно зависит от сложности, которую Вы хотите. Например, я хочу обрисовать в общих чертах все свои отступы с вертикальной панелью, таким образом, моя строка отступа определяется следующим образом:
return new string(Enumerable.Range(0, indentSize*indent).Select(
n => n%4 == 0 ? '|' : ' ').ToArray());
Во всех версиях.NET можно повторить строку таким образом:
public static string Repeat(string value, int count)
{
return new StringBuilder(value.Length * count).Insert(0, value, count).ToString();
}
Повторить символ, new String('\t', count)
Ваш лучший выбор. См. ответ @CMS.
Методы расширения:
public static string Repeat(this string s, int n)
{
return new String(Enumerable.Range(0, n).SelectMany(x => s).ToArray());
}
public static string Repeat(this char c, int n)
{
return new String(c, n);
}