en C #, j'ai une largeur que je veux utiliser pour certaines cordes, mais je ne saurai pas cette largeur avant l'exécution du temps d'exécution. Je fais quelque chose comme ceci: existe une directive de formatage de chaîne qui me permet de préciser cela sans casser ma propre chaîne de format comme ceci? P> J'ai regardé autour de moi? sur le MSDN pendant un peu de temps et j'ai l'impression d'être manquant tout un chapitre sur les cordes de format ou quelque chose. P> p>
8 Réponses :
Vous pouvez faire quelque chose comme
string spaces = String.Concat(Enumerable.Repeat(" ", digits).ToArray());
Hahah je sais, c'est assez drôle que j'ai manqué Padleft, je l'ai trouvé dès que j'ai écrit ça.
Vous pouvez utiliser le http: // msdn .microsoft.com / fr-US / US / Bibliothèque / System.string.padleft% 28vs.71% 29.aspx P> padleft code> et
PADRIGHT code> Méthodes: P>
Visez un coup d'oeil à padleft code>:
Je vais +1 vous, parce que je suis embarrassé, j'ai oublié Padleft, c'était sur la pointe de ma langue.
Les fonctions mentionnées par d'autres œuvreront, mais cette page MSDN a une solution plus générale pour formater ces modifications au moment de l'exécution:
Ils donnent des exemples beaucoup comme les vôtres. P>
strud> je pensais Vous essayiez de résoudre le cas général de composition d'une chaîne de format au moment de l'exécution. Par exemple, s'il n'y avait pas de Padleft intégré (), vous pouvez le faire: P>
string s = string.Format( string.Format("Price = |{{0,{0}}}|", nColumnWidth), myInt);
Peut-être que je suis aveugle mais je ne vois aucun exemple sur cette page qui fait quelque chose comme ce que je fais.
Peut-être que cela aidera votre recherche sur le formatage: p>
Types de formatage
Formatage composite P>
Cependant, je ne pense pas que vous allez faire beaucoup mieux que cela, car le paramètre d'alignement doit faire partie de la chaîne de format et ne semble pas être représentée par une propriété. P>
Si "le paramètre d'alignement doit faire partie de la chaîne de format", cela répond à ma question: ce n'est pas possible à String.Format. Je pensais qu'il y aurait un moyen d'utiliser des paramètres, tels que (format NIL "~ VD" Valeur des chiffres) CODE> dans LISP - Je sais que le format
lisp (code> est beaucoup plus puissant Général, mais j'ai pensé que l'utilisation d'un param était assez basique. Merci!
Probablement surpeuîner, mais il suffit d'illustrer un moyen d'encapsuler le format Spécification et d'utiliser une surcharge de string.format code> qui accepte un
iFormatProvider code>.
class Program
{
public static void Main(string[] args)
{
int digits = 7;
var format = new PaddedNumberFormatInfo(digits);
Console.WriteLine(String.Format(format, "{0}", 123));
}
}
class PaddedNumberFormatInfo : IFormatProvider, ICustomFormatter
{
public PaddedNumberFormatInfo(int digits)
{
this.DigitsCount = digits;
}
public int DigitsCount { get; set; }
// IFormatProvider Members
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
return this;
return null;
}
// ICustomFormatter Members
public string Format(string format, object arg, IFormatProvider provider)
{
return String.Format(
String.Concat("{0, ", this.DigitsCount, "}"), arg);
}
}
J'ai posté un article de codeProject qui peut être ce que vous voulez.
Voir: AC # moyen de la largeur indirecte et de la mise en forme de style. p>
essentiellement c'est une méthode, formatex, qui agit comme String.Format, sauf Il permet d'alignement indirect et de spécificateurs de formatage. p>
FormatEx("{0,{1}:{2}}", value, width, formatString);
https://msdn.microsoft.com/en-us/library/xsa4321w (v = vs.110) .aspx p> chaîne code> a un constructeur qui crée une chaîne avec un caractère donné répété
n code> fois.