Согласно этот парень , IIf может взять до 6x настолько же долго как Если/Тогда. YMMV.
Вы можете написать
" "
вместо
new String(' ')
. Это поможет?
В зависимости от того, что вы делаете, вы можете посмотреть StringBuilder.Append перегрузка, которая принимает символ и счетчик повторений:
var tabs = new StringBuilder();
tabs.Append(' ', 8);
или в конструктор string
, который создает строку из символа счетчика повторений:
var tabs = new string(' ', 8);
Вот корпоративное объектно-ориентированное решение чтобы удовлетворить все ваши потребности в создании пространства:
public abstract class SpaceFactory
{
public static readonly SpaceFactory Space = new SpaceFactoryImpl();
public static readonly SpaceFactory ZeroWidth = new ZeroWidthFactoryImpl();
protected SpaceFactory { }
public abstract char GetSpace();
public virtual string GetSpaces(int count)
{
return new string(this.GetSpace(), count);
}
private class SpaceFactoryImpl : SpaceFactory
{
public override char GetSpace()
{
return '\u0020';
}
}
private class ZeroWidthFactoryImpl : SpaceFactory
{
public override char GetSpace()
{
return '\u200B';
}
}
}
Теперь, когда вы разъяснили комментарии:
В моем реальном коде я делаю новый String ('', numberOfSpaces), поэтому я вероятно, нужно еще использовать новый Строковая часть.
... другие ответы пока фактически бесполезны: (
Вы могли бы написать:
const char Space = ' ';
затем использовать
new string(Space, numberOfSpaces)
, но я не вижу в этом никакой пользы over
new string(' ', numberOfSpaces)
если количество пробелов будет изменяться, вы можете сделать что-то вроде этого:
public static string Space(int count)
{
return "".PadLeft(count);
}
Space(2);
Нет причин для этого. При прочих равных, меньший код - лучший код . String.Empty
и new String ('')
передают то же, что и ""
и ""
, они просто принимают больше символов
Попытка сделать это «больше ОО» просто добавляет персонажей без всякой пользы. Объектная ориентация не является самоцелью.
В зависимости от того, насколько это распространено в вашем коде, метод StringBuilder может быть лучше.
StringBuilder tabs = new StringBuilder();
...
tabs.Append(" ");
Вы также можете смешивать константу .. .
StringBuilder tabs = new StringBuilder();
const string SPACE = " ";
...
tabs.Append(SPACE);
Расширить строку, чтобы дать вам метод чтобы добавить пробел
public static string AddSpace(this String text, int size)
{
return text + new string(' ', size)
}
Ужасно само по себе.
Более «объектно-ориентированный» способ - найти более простой способ решения вашей более крупной бизнес-проблемы. Например, тот факт, что у вас есть переменная с именем tabs
, подсказывает мне, что вы пытаетесь свернуть свой собственный код выравнивания столбцов. String.Format
поддерживает это напрямую, например
// Left-align name and status, right-align amount (formatted as currency).
writer.WriteLine("Name Status Amount");
writer.WriteLine("-------------------- ---------- ----------");
foreach(var item in items) {
writer.WriteLine(string.Format("{0,-20} {1,-10} {2,10:C}", item.Name, item.Status, item.Amount));
}
Если язык позволял это, вы могли бы добавить свойство расширения к типу String, которое было пробелом, например:
public static class StringExt
{
public static char Space(this String s)
{
get {
return ' ';
}
}
}
, но это невозможно. Я думаю, что было бы лучше сохранить пространство внутри собственности, если бы оно было локализуемым, но я думаю, что пространства универсальны для всех языков.
Я думаю, что вы слишком далеко заходите в объектно-ориентированном стиле .. Простое добавление пробела не требует целого класса.
tabs += new String(' ');
или
tabs += " ";
вполне подойдут.
Вы могли бы использовать "\ t"
, я думаю, чтобы дать вам символ табуляции. Это может сделать расстояние более четким.