Альтернативы "" для создания строк, содержащих несколько пробельных символов
Мне интересно, есть ли еще один способ создания пробелов в С#.
Буквально космический код!
В настоящее время у меня есть tabs += new String(" ");
, и я не могу не чувствовать, что это несколько напоминает использование ""
вместо String.Empty
.
Что я могу использовать для создания пробелов, которые не являются " "
?
Ответы
Ответ 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).