Supposons que j'ai une chaîne, par exemple,
string snip = "</li></ul>";
Je veux essentiellement l'écrire plusieurs fois, en fonction d'une valeur entière.
string snip = "</li></ul>";
int multiplier = 2;
// TODO: magic code to do this
// snip * multiplier = "</li></ul></li></ul>";
EDIT: Je sais que je peux facilement écrire ma propre fonction pour implémenter cela, je me demandais juste s'il y avait un opérateur de chaîne étrange que je ne connaissais pas
c#
string
extension-methods
en dépit
la source
la source
Réponses:
Dans .NET 4, vous pouvez faire ceci:
la source
operator*
représente le binaire . À chacun le leur, je suppose.Notez que si votre "chaîne" n'est qu'un seul caractère, il y a une surcharge du constructeur de chaîne pour la gérer:
la source
Malheureusement / heureusement, la classe string est scellée, vous ne pouvez donc pas en hériter et surcharger l'opérateur *. Vous pouvez cependant créer une méthode d'extension:
la source
Je suis avec DrJokepu sur celui-ci , mais si, pour une raison quelconque, vous voulez tricher en utilisant la fonctionnalité intégrée, vous pouvez faire quelque chose comme ceci:
Ou, si vous utilisez .NET 4:
Personnellement, je ne dérangerais pas - une méthode d'extension personnalisée est beaucoup plus agréable.
la source
Juste pour être complet - voici une autre façon de procéder:
Je pense que j'ai tiré celui-là de Stack Overflow il y a quelque temps, donc ce n'est pas mon idée.
la source
Vous devrez écrire une méthode - bien sûr, avec C # 3.0, cela pourrait être une méthode d'extension:
puis:
la source
string.Join
également - pourquoi ne pas faire une boucle n fois? Beaucoup plus direct.Un peu tard (et juste pour le plaisir), si vous voulez vraiment utiliser l'
*
opérateur pour ce travail, vous pouvez le faire:Et donc:
Notez que, aussi longtemps que vous êtes en mesure de trouver un comportement raisonnable pour eux, vous pouvez également gérer d' autres opérateurs par
StringWrap
classe, comme\
,^
,%
etc ...PS:
Multiply()
crédits d'extension à @DrJokepu tous droits réservés ;-)la source
C'est beaucoup plus concis:
L'espace de noms
using System.Text;
doit être importé dans ce cas.la source
la source
Si vous avez .Net 3.5 mais pas 4.0, vous pouvez utiliser System.Linq's
la source
String.Concat
, et sur 3.5, vous en aurez également besoin.ToArray()
. Pas la solution la plus élégante, j'en ai peur.Puisque tout le monde ajoute ses propres exemples .NET4 / Linq, je pourrais aussi bien ajouter les miens. (Fondamentalement, c'est DrJokepu, réduit à une seule ligne)
la source
D'accord, voici mon avis sur la question:
Je suis un peu ridicule bien sûr, mais quand j'ai besoin d'avoir une tabulation dans des classes générant du code, Enumerable.Repeat le fait pour moi. Et oui, la version StringBuilder est bien aussi.
la source
Voici mon avis à ce sujet juste pour référence future:
la source
ParallelEnumerable
dans des situations comme celle-ci.string.Join
a besoin d'utiliser les éléments dans l'ordre, donc la mise en parallèle de leur génération est inutile.