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

Jam*_*xon 25 c# string spaces

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

字面太空码!

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

我可以用什么来创建不是的空间" "

dtb*_*dtb 44

你可以写

" "
Run Code Online (Sandbox Code Playgroud)

代替

new String(' ')
Run Code Online (Sandbox Code Playgroud)

这有帮助吗?


根据您的操作,您可能希望查看接受字符和"重复"计数的StringBuilder.Append重载:

var tabs = new StringBuilder();
tabs.Append(' ', 8);
Run Code Online (Sandbox Code Playgroud)

或进入string 构造函数是构建从性格上的一个"重复"的字符串数:

var tabs = new string(' ', 8);
Run Code Online (Sandbox Code Playgroud)

这是一个企业级的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';
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Jamie:首先说它是有用的,因为它基本上使所有现有的答案都无效. (8认同)
  • 谢谢dtb.我不得不接受这个,不仅因为你在顶部回答了问题,而且还因为你使用了"SpaceFactory"和"enterprisey"这两个术语. (2认同)
  • 我很遗憾我只能投票一次 (2认同)

Jon*_*eet 15

现在您已在评论中澄清:

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

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

可以写:

const char Space = ' ';
Run Code Online (Sandbox Code Playgroud)

然后用

new string(Space, numberOfSpaces)
Run Code Online (Sandbox Code Playgroud)

但我认为没有任何好处

new string(' ', numberOfSpaces)
Run Code Online (Sandbox Code Playgroud)


TSt*_*per 8

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

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

Space(2);
Run Code Online (Sandbox Code Playgroud)

  • 或者使用字符串构造函数来代替字符:`return new string('',count);` (2认同)

Gab*_*art 5

没有理由这样做.所有其他条件相同,更小的代码是更好的代码.String.Emptynew String(' ')传达同样的事情,""而且" ",他们只是需要更多的字符来做到这一点.

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