用于创建包含多个空白字符的字符串的替代方法
我想知道是否有更多的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.Empty
和new 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();