我想知道是否有更多的OO方式在C#中创建空格。用于创建包含多个空白字符的字符串的替代方法
字面空格代码!
我目前有tabs += new String(" ");
,我不禁觉得这有点让人想起使用""
而不是String.Empty
。
我能用什么来创建不是" "
的空间?
我想知道是否有更多的OO方式在C#中创建空格。用于创建包含多个空白字符的字符串的替代方法
字面空格代码!
我目前有tabs += new String(" ");
,我不禁觉得这有点让人想起使用""
而不是String.Empty
。
我能用什么来创建不是" "
的空间?
你可以写的
" "
代替
new String(' ')
这是否帮助?
取决于你做什么,你可能想看看进入StringBuilder.Append重载接受一个字符和一个“重复”算:
var tabs = new StringBuilder();
tabs.Append(' ', 8);
或进入string
constructor,从构建一个字符串性格上的一个 '重复' 算:
var tabs = new string(' ', 8);
下面是一个enterprisey 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部分。 – 2009-11-11 16:20:11
@Jamie:说一开始就很有用,因为它基本上使所有现有答案都无效。 – 2009-11-11 16:22:50
是的,为此的appologies。我认为其他人在某个时候可能会有这个问题,这些人可能没有指定空格的数量,所以我认为这些答案对他们很有用。 – 2009-11-11 16:33:56
根据如何流行,这是在你的代码,StringBuilder的方式可能更好。
StringBuilder tabs = new StringBuilder();
...
tabs.Append(" ");
您可在恒太混...
StringBuilder tabs = new StringBuilder();
const string SPACE = " ";
...
tabs.Append(SPACE);
如果空格数量会改变,那么你可以做这样的事情:
public static string Space(int count)
{
return "".PadLeft(count);
}
Space(2);
不错,但我会使用String.Empty来满足他对代码中字符串的不喜欢! – 2009-11-11 16:27:46
或者使用字符串构造函数来代替字符数:'返回新字符串('',count);' – LukeH 2009-11-11 16:29:37
扩展字符串给你一个添加空间的方法
public static string AddSpace(this String text, int size)
{
return text + new string(' ', size)
}
虽然它自己的权利可怕。
+1 - 扩展方法似乎与OP的样式一致。注意你可以用'return new String('',count);'替换这个函数的主体,因为这个重载的构造函数完全和你所做的一样:) – 2009-11-11 16:26:09
即使可能需要扩展方法,也不需要使用像这样重复字符串连接。 “返回文本+新字符串('',大小)”将是更合适的国际海事组织。 (将关键字'string'的第一个参数更改为'text' ...) – 2009-11-11 16:29:18
感谢John和Jon(抱歉Tony)。是的,感觉好多了,作为一个网络机构,我很少想要在彼此旁边有两个空格,只是认为我会增加我的两便士价值。 – 2009-11-11 16:34:04
没有理由这样做。其他所有条件相同,smaller code is better code。 String.Empty
和new String(' ')
沟通与""
和" "
相同的东西,他们只是采取更多的字符来做到这一点。
试图让它“更多OO”只是增加字符没有任何好处。面向对象本身并不是目的。
如果语言允许它,你可以扩展属性添加到类型为String这是空间,是这样的:
public static class StringExt
{
public static char Space(this String s)
{
get {
return ' ';
}
}
}
但这是不可能的。我认为如果这是一个可以本地化的东西,那么留在房屋内部的空间会更好,但我认为空间在所有语言中都是通用的。
现在你已经在注释中明确:
在我实际的代码我在做新的 字符串(””,numberOfSpaces),所以我可能 需要还是使用新的 字符串的一部分。
...其他答案至今都有效没用:(
您可能写:
const char Space = ' ';
然后用
new string(Space, numberOfSpaces)
但我不看到任何好处
new string(' ', numberOfSpaces)
我认为你正在采取OO方式远..一个简单的空间增加不需要整个班级。
tabs += new String(' ');
或
tabs += " ";
就好了。
更“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));
}
谢谢基督徒。我正在解决的更大的问题是我有一个Idnumerable对象与Id和ParentId。我将这些对象的内容输出为CSV格式用于数据导出,并需要显示对象之间的关系。在屏幕上,它们显示为树状网格,为了导出,我将它们间隔以显示关系。 – 2009-11-11 16:47:16
我想你可以用"\t"
给你一个制表符。这可能会使空间更清晰。
StringBuilder.Insert和StringBuilder.Append允许您创建任何数字空格,例如sb.Insert(0,“”,20)将在您的sb(StringBuilder)对象的开始处插入20个空格。
'''有什么问题? – 2009-11-11 16:14:26
而且''''而不是'string.Empty'也没有错。 – LukeH 2009-11-11 16:17:32
我不认为有这样的“错误”。我只是想知道是否有另一种方式来做到这一点,也许更多... OO ...我敢说。 – 2009-11-11 16:18:11