用于创建包含多个空白字符的字符串的替代方法

我想知道是否有更多的OO方式在C#中创建空格。

字面太空码!

我目前有tabs += new String(" "); 我不禁觉得这有点让人联想到使用""而不是String.Empty

我可以用什么来创建不是" "空格?

你可以写

 " " 

代替

 new String(' ') 

这有帮助吗?


根据您的操作,您可能需要查看接受字符和“重复”计数的StringBuilder.Append重载:

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

或者从字符构造一个string 构造函数’重复’计数:

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

现在您已在评论中澄清:

在我的实际代码中,我正在做新的String(”,numberOfSpaces),所以我可能还需要使用新的String部分。

…到目前为止的其他答案实际上是无用的:(

可以写:

 const char Space = ' '; 

然后用

 new string(Space, numberOfSpaces) 

但我认为没有任何好处

 new string(' ', numberOfSpaces) 

如果空格的数量会发生变化,那么你可以这样做:

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

没有理由这样做。 在其他条件相同的情况下, 较小的代码是更好的代 String.Emptynew String(' ')传达与""" "相同的东西,它们只需要更多的字符来完成它。

试图让它“更多OO”只是增加了角色,没有任何好处。 面向对象本身并不是目的。

根据代码中的流行程度,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) } 

虽然它本身很糟糕。

更“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)); } 

如果允许的语言,您可以将扩展属性添加到类型为String的空间,类似于:

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

但那是不可能的。 我认为如果它是一个可本地化的东西,最好将空间保留在属性中,但我认为空间在所有语言中都是通用的。

我认为你正在采用OO方式进行远程…一个简单的空间添加不需要整个类。

 tabs += new String(' '); 

要么

 tabs += " "; 

很好。

我认为你可以使用"\t"给你一个制表符。 这可能会使航天更清晰。

StringBuilder.Insert和StringBuilder.Append允许您创建任何数字空格,例如sb.Insert(0,“”,20)将在您的sb(StringBuilder)对象的开头插入20个空格。

您可以创建类扩展。

 public static class StringExtensions { public static string GetSpace(this String) { return " "; } } 

你可以打电话给这个。

 String.GetSPace();