27

C#でスペースを作成するもっとOOな方法があるかどうか疑問に思います。

文字通りスペースコード!

私は現在持っていて、これはの代わりにtabs += new String(" ");使用することをいくらか思い出させると感じずにはいられません。""String.Empty

そうでないスペースを作成するために何を使用できます" "か?

4

12 に答える 12

47

あなたは書ける

" "

それ以外の

new String(' ')

それは役に立ちますか?


何をするかに応じて、文字と「繰り返し」カウントを受け入れるStringBuilder.Appendオーバーロードを調べたい場合があります。

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

または、文字から文字列を構築するstring コンストラクターに'repeat' count:

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';
        }
    }
}
于 2009-11-11T16:16:58.373 に答える
15

コメントで明確にしたので、次のようにします。

私の実際のコードでは、新しいString(''、numberOfSpaces)を実行しているので、おそらく新しいString部分を使用する必要があります。

...これまでの他の答えは事実上役に立たない:(

あなた書くことができます:

const char Space = ' ';

次に使用します

new string(Space, numberOfSpaces)

でもそれ以上のメリットは見当たりません

new string(' ', numberOfSpaces)
于 2009-11-11T16:24:13.773 に答える
8

スペースの数が変化する場合は、次のようにすることができます。

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

Space(2);
于 2009-11-11T16:18:41.370 に答える
5

これを行う理由はありません。他のすべてが等しい場合、小さいコードはより良いコードです。String.Emptynew String(' ')同じことを伝えます""" "彼らはそれをするためにより多くのキャラクターを必要とします。

それを「もっとOO」にしようとすると、何の利益もなく文字が追加されるだけです。オブジェクト指向はそれ自体が目的ではありません。

于 2009-11-11T16:20:35.213 に答える
3

これがコードでどの程度普及しているかによっては、StringBuilderの方法の方が適している場合があります。

StringBuilder tabs = new StringBuilder();
...

tabs.Append(" ");

あなたも定数に混ぜることができます...

StringBuilder tabs = new StringBuilder();
const string SPACE = " ";
...

tabs.Append(SPACE);
于 2009-11-11T16:17:23.540 に答える
3

文字列を拡張して、スペースを追加する方法を提供します

public static string AddSpace(this String text, int size)
{
   return text + new string(' ', size)
}

それ自体はひどいです。

于 2009-11-11T16:19:19.527 に答える
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));
}
于 2009-11-11T16:44:40.330 に答える
1

言語で許可されている場合は、次のような拡張プロパティを文字列型に追加できます。これはSpaceでした。

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

しかし、それは不可能です。ローカライズ可能なものであれば、物件内のスペースを維持したほうがいいと思いますが、スペースはすべての言語で普遍的だと思います。

于 2009-11-11T16:20:51.287 に答える
1

OOの道を進んでいると思います。スペースを追加するだけで、クラス全体が必要になるわけではありません。

tabs += new String(' ');

また

tabs += " ";

大丈夫です。

于 2009-11-11T16:31:09.347 に答える
0

"\t"タブ文字を付けるために使用できると思います。それはスペースをより明確にするかもしれません。

于 2009-11-11T17:19:30.390 に答える
0

StringBuilder.InsertおよびStringBuilder.Appendを使用すると、任意の数のスペースを作成できます。たとえば、sb.Insert(0、 ""、20)は、sb(StringBuilder)オブジェクトの先頭に20個のスペースを挿入します。

于 2014-04-24T07:42:23.377 に答える
0

クラス拡張を作成できます。

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

そして、あなたはこれを呼び出すことができます。

String.GetSPace();
于 2018-09-26T05:24:58.373 に答える