Je me demande s’il existe un moyen plus OO de créer des espaces en C #.
Littéralement Space Code!
J'ai actuellement tabs += new String(" ");
et je ne peux pas m'empêcher de penser que cela rappelle un peu l'utilisation de ""
au lieu de String.Empty
.
Que puis-je utiliser pour créer des espaces qui ne sont pas " "
?
Tu peux écrire
" "
au lieu de
new String(' ')
Est ce que ça aide?
Selon ce que vous faites, vous voudrez peut-être examiner la surcharge StringBuilder.Append acceptant un caractère et un nombre de répétitions:
var tabs = new StringBuilder();
tabs.Append(' ', 8);
ou dans la string
constructor qui construit une chaîne à partir d'un caractère ayant un nombre de répétitions:
var tabs = new string(' ', 8);
Voici une solution d'entreprise OO pour répondre à tous vos besoins en matière de génération d'espace:
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';
}
}
}
Maintenant que vous avez clarifié vos commentaires:
Dans mon code actuel je fais nouveau String ('', numberOfSpaces) donc je probablement besoin de continuer à utiliser le nouveau Partie de chaîne.
... les autres réponses jusqu'à présent sont effectivement inutiles :(
Vous pourriez écrire:
const char Space = ' ';
puis utiliser
new string(Space, numberOfSpaces)
mais je ne vois aucun avantage de cela sur
new string(' ', numberOfSpaces)
si le nombre d'espaces change, vous pouvez faire quelque chose comme ceci:
public static string Space(int count)
{
return "".PadLeft(count);
}
Space(2);
Il n'y a aucune raison de faire cela. Toutes choses étant égales par ailleurs, un code plus petit correspond à un meilleur code . String.Empty
et new String(' ')
communiquent la même chose que ""
et " "
, ils ont juste besoin de plus de caractères pour le faire.
Essayer de le rendre plus OO ajoute simplement des caractères sans aucun avantage. L'orientation objet n'est pas une fin en soi.
En fonction de la prévalence dans votre code, la méthode StringBuilder peut être meilleure.
StringBuilder tabs = new StringBuilder();
...
tabs.Append(" ");
Vous pouvez aussi mélanger la constante ...
StringBuilder tabs = new StringBuilder();
const string SPACE = " ";
...
tabs.Append(SPACE);
Étendre la chaîne pour vous donner une méthode pour ajouter de l'espace
public static string AddSpace(this String text, int size)
{
return text + new string(' ', size)
}
Horrible dans son propre droit cependant.
Le moyen le plus efficace consiste à trouver un moyen plus simple de résoudre le problème de votre entreprise. Par exemple, le fait que vous ayez une variable nommée tabs
m'indique que vous essayez de lancer votre propre code d'alignement de colonne. String.Format
le supporte directement, par exemple.
// 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));
}
Si la langue le permettait, vous pourriez ajouter une propriété d'extension au type String qui était Space, quelque chose comme:
public static class StringExt
{
public static char Space(this String s)
{
get {
return ' ';
}
}
}
mais ce n'est pas possible. Je pense qu'il serait préférable de garder l'espace à l'intérieur de la propriété si c'était un objet localisable, mais je pense que les espaces sont universels dans toutes les langues.
Je pense que vous emmenez OO trop loin. Un simple ajout d'espace ne nécessite pas une classe entière.
tabs += new String(' ');
ou
tabs += " ";
est très bien.
Vous pouvez créer des extensions de classe.
public static class StringExtensions
{
public static string GetSpace(this String)
{
return " ";
}
}
et vous pouvez appeler ça.
String.GetSPace();
StringBuilder.Insert et StringBuilder.Append vous permettent de créer des espaces numériques, par exemple. sb.Insert (0, "", 20) insérera 20 espaces au début de votre objet sb (StringBuilder).
Je pense que vous pourriez utiliser "\t"
pour vous donner un caractère de tabulation. Cela pourrait rendre l'espace plus clair.