Подтвердить что ты не робот

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

Мне интересно, есть ли еще один способ создания пробелов в С#.

Буквально космический код!

В настоящее время у меня есть tabs += new String(" ");, и я не могу не чувствовать, что это несколько напоминает использование "" вместо String.Empty.

Что я могу использовать для создания пробелов, которые не являются " "?

4b9b3361

Ответ 1

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

" "

вместо

new String(' ')

Помогает ли это?


В зависимости от того, что вы делаете, вы можете посмотреть в StringBuilder.Append перегрузку, которая принимает символ и счетчик 'repeat':

var tabs = new StringBuilder();
tabs.Append(' ', 8);

или в конструктор string , который строит строку из символа 'repeat' count:

var tabs = new string(' ', 8);

Здесь решение предприятия OO для удовлетворения всех ваших потребностей в создании пространства:

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';
        }
    }
}

Ответ 2

Теперь, когда вы уточнили в комментариях:

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

... другие ответы до сих пор бесполезны: (

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

const char Space = ' ';

затем используйте

new string(Space, numberOfSpaces)

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

new string(' ', numberOfSpaces)

Ответ 3

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

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

Space(2);

Ответ 4

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

Попытка сделать его "более OO" просто добавляет персонажей без выгоды. Object-Orientation не является самоцелью.

Ответ 5

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

StringBuilder tabs = new StringBuilder();
...

tabs.Append(" ");

Вы также можете перемешать в константе...

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

tabs.Append(SPACE);

Ответ 6

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

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

Ужасно в этом есть собственное право.

Ответ 7

Чем больше "OO" будет искать более простой способ решения вашей более крупной бизнес-задачи. Например, тот факт, что у вас есть переменная с именем 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));
}

Ответ 8

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

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

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

Ответ 9

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

tabs += new String(' ');

или

tabs += " ";

просто отлично.

Ответ 10

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

Ответ 11

StringBuilder.Insert и StringBuilder.Append позволяют создавать любые пробелы, например. sb.Insert(0, "", 20) вставляет 20 пробелов в начало вашего объекта sb (StringBuilder).