Альтернативы “” для создания строк, содержащих несколько пробельных символов

Согласно этот парень , IIf может взять до 6x настолько же долго как Если/Тогда. YMMV.

25
задан dash 27 June 2012 в 22:31
поделиться

10 ответов

Вы можете написать

" "

вместо

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';
        }
    }
}
44
ответ дан 28 November 2019 в 17:53
поделиться

Теперь, когда вы разъяснили комментарии:

В моем реальном коде я делаю новый String ('', numberOfSpaces), поэтому я вероятно, нужно еще использовать новый Строковая часть.

... другие ответы пока фактически бесполезны: (

Вы могли бы написать:

const char Space = ' ';

затем использовать

new string(Space, numberOfSpaces)

, но я не вижу в этом никакой пользы over

new string(' ', numberOfSpaces)
15
ответ дан 28 November 2019 в 17:53
поделиться

если количество пробелов будет изменяться, вы можете сделать что-то вроде этого:

public static string Space(int count)
{
    return "".PadLeft(count);
}

Space(2);
8
ответ дан 28 November 2019 в 17:53
поделиться

Нет причин для этого. При прочих равных, меньший код - лучший код . String.Empty и new String ('') передают то же, что и "" и "" , они просто принимают больше символов

Попытка сделать это «больше ОО» просто добавляет персонажей без всякой пользы. Объектная ориентация не является самоцелью.

5
ответ дан 28 November 2019 в 17:53
поделиться

В зависимости от того, насколько это распространено в вашем коде, метод StringBuilder может быть лучше.

StringBuilder tabs = new StringBuilder();
...

tabs.Append(" ");

Вы также можете смешивать константу .. .

StringBuilder tabs = new StringBuilder();
const string SPACE = " ";
...

tabs.Append(SPACE);
3
ответ дан 28 November 2019 в 17:53
поделиться

Расширить строку, чтобы дать вам метод чтобы добавить пробел

public static string AddSpace(this String text, int size)
{
   return text + new string(' ', size)
}

Ужасно само по себе.

3
ответ дан 28 November 2019 в 17:53
поделиться

Более «объектно-ориентированный» способ - найти более простой способ решения вашей более крупной бизнес-проблемы. Например, тот факт, что у вас есть переменная с именем 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));
}
2
ответ дан 28 November 2019 в 17:53
поделиться

Если язык позволял это, вы могли бы добавить свойство расширения к типу String, которое было пробелом, например:

public static class StringExt
{
    public static char Space(this String s)
    {
        get {
            return ' ';
        }
    }
}

, но это невозможно. Я думаю, что было бы лучше сохранить пространство внутри собственности, если бы оно было локализуемым, но я думаю, что пространства универсальны для всех языков.

1
ответ дан 28 November 2019 в 17:53
поделиться

Я думаю, что вы слишком далеко заходите в объектно-ориентированном стиле .. Простое добавление пробела не требует целого класса.

tabs += new String(' ');

или

tabs += " ";

вполне подойдут.

1
ответ дан 28 November 2019 в 17:53
поделиться

Вы могли бы использовать "\ t" , я думаю, чтобы дать вам символ табуляции. Это может сделать расстояние более четким.

0
ответ дан 28 November 2019 в 17:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: