C#でスペースを作成するもっとOOな方法があるかどうか疑問に思います。
文字通りスペースコード!
私は現在持っていて、これはの代わりにtabs += new String(" ");
使用することをいくらか思い出させると感じずにはいられません。""
String.Empty
そうでないスペースを作成するために何を使用できます" "
か?
あなたは書ける
" "
それ以外の
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';
}
}
}
コメントで明確にしたので、次のようにします。
私の実際のコードでは、新しい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));
}
言語で許可されている場合は、次のような拡張プロパティを文字列型に追加できます。これはSpaceでした。
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();