我想知道是否有更多的OO方式在C#中创建空格。
字面太空码!
我目前有tabs += new String(" ");
,我不禁觉得这有点让人想起使用""
代替String.Empty
。
我可以使用什么来创建非" "
的空间?
答案 0 :(得分:43)
你可以写
" "
而不是
new String(' ')
这有帮助吗?
根据您的操作,您可能需要查看接受字符和“重复”计数的StringBuilder.Append重载:
var tabs = new StringBuilder();
tabs.Append(' ', 8);
或string
constructor构建字符串'重复'计数字符串:
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';
}
}
}
答案 1 :(得分:15)
现在您已在评论中澄清:
在我的实际代码中,我正在做新事物 字符串('',numberOfSpaces)所以我 可能还需要使用新的 字符串部分。
......到目前为止的其他答案实际上是无用的:(
你可以写:
const char Space = ' ';
然后使用
new string(Space, numberOfSpaces)
但我认为没有任何好处
new string(' ', numberOfSpaces)
答案 2 :(得分:8)
如果空格的数量会发生变化,那么你可以这样做:
public static string Space(int count)
{
return "".PadLeft(count);
}
Space(2);
答案 3 :(得分:5)
没有理由这样做。其他条件相同,smaller code is better code。 String.Empty
和new String(' ')
与""
和" "
的内容相同,他们只需要更多字符即可。
试图让它“更多OO”只是增加了角色而没有任何好处。面向对象本身并不是目的。
答案 4 :(得分:3)
根据代码的普遍程度,StringBuilder方式可能会更好。
StringBuilder tabs = new StringBuilder();
...
tabs.Append(" ");
你也可以混合常数......
StringBuilder tabs = new StringBuilder();
const string SPACE = " ";
...
tabs.Append(SPACE);
答案 5 :(得分:3)
扩展字符串以提供添加空间的方法
public static string AddSpace(this String text, int size)
{
return text + new string(' ', size)
}
虽然它本身很糟糕。
答案 6 :(得分:2)
更“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));
}
答案 7 :(得分:1)
如果允许使用该语言,则可以将扩展属性添加到类型为String的类型中,例如:
public static class StringExt
{
public static char Space(this String s)
{
get {
return ' ';
}
}
}
但这是不可能的。我认为如果它是一个可本地化的东西,最好将空间保留在属性中,但我认为空间在所有语言中都是通用的。
答案 8 :(得分:1)
我认为你正在采用OO的方式......简单地添加空间不需要整个课程。
tabs += new String(' ');
或
tabs += " ";
很好。
答案 9 :(得分:0)
我认为您可以使用"\t"
为您提供制表符。这可能会使空间更清晰。
答案 10 :(得分:0)
StringBuilder.Insert和StringBuilder.Append允许您创建任何数字空格,例如sb.Insert(0,“”,20)将在sb(StringBuilder)对象的开头插入20个空格。
答案 11 :(得分:0)
您可以创建类扩展。
public static class StringExtensions
{
public static string GetSpace(this String)
{
return " ";
}
}
您可以叫这个。
String.GetSPace();