Puis-je “multiplier” une chaîne de caractères (en C#)?
Supposons que j'ai une chaîne de caractères, par exemple,
string snip = "</li></ul>";
Je veux essentiellement de l'écrire plusieurs fois, selon certaines valeur de type entier.
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 mettre en œuvre la présente, je me demandais juste si il y avait un peu bizarre opérateur chaîne que je ne connaissais pas
- vous pouvez simplement utiliser une boucle
- Double Possible de Est-il un moyen facile de retourner une chaîne répétée un nombre X de fois?
Vous devez vous connecter pour publier un commentaire.
Dans .NET 4 vous pouvez le faire:
operator*
représente. À chacun son propre, je suppose.Notez que si votre "chaîne" est un seul caractère, il y a une surcharge de la chaîne constructeur pour le manipuler:
Malheureusement /heureusement, la classe string est scellé de sorte que vous ne pouvez pas hériter d'elle et la surcharge de l'opérateur*. Vous pouvez créer une méthode d'extension si:
Je suis avec DrJokepu sur celui-ci, mais si pour une raison quelconque vous ne voulez tricher à l'aide intégrée dans les fonctionnalités, alors vous pourriez faire quelque chose comme ceci:
Ou, si vous êtes en utilisant .NET 4:
Personnellement, je ne voudrais pas ennuyer si - une méthode d'extension personnalisée est beaucoup plus agréable.
Juste par souci d'exhaustivité - voici une autre façon de faire:
Je pense que j'ai tiré que l'un de Débordement de Pile il y a quelques temps, de sorte qu'il n'est pas mon idée.
Vous deviez écrire une méthode de cours, avec C# 3.0, il pourrait être une méthode d'extension:
alors:
string.Join
ainsi - pourquoi ne pas simplement de la boucle n fois? Beaucoup plus directe.Un peu de retard (et juste pour le fun), si vous voulez vraiment utiliser le
*
opérateur pour ce travail, vous pouvez faire ceci :Et donc:
Noter que, tant que vous êtes en mesure de trouver un comportement raisonnable pour eux, vous pouvez également gérer d'autres opérateurs à travers
StringWrap
classe, comme\
,^
,%
etc...P. S.:
Multiply()
extension des crédits à @DrJokepu tous droits réservés 😉C'est beaucoup plus concis:
L'espace de noms
using System.Text;
doivent être importés dans ce cas.Si vous en avez .Net 3.5, mais pas la version 4.0, vous pouvez utiliser le Système.Linq
String.Concat
, et sur 3.5 vous auriez également besoin d'.ToArray()
. Pas la solution la plus élégante, je le crains.Puisque tout le monde est d'ajouter leur propre .NET4/Linq des exemples, je pourrais tout aussi bien ajouter mon propre. (En gros, il DrJokepu est, réduit à un one-liner)
Ok, voici mon point de vue sur la question:
Je suis un peu idiot, bien sûr, mais quand j'ai besoin d'avoir la tabulation dans le code de génération de classes Énumérables.Répétez le fait pour moi. Et ouais, la classe StringBuilder version est très bien, aussi.
Voici mon point de vue sur ce seulement pour l'avenir, référence:
ParallelEnumerable
dans des situations de ce genre.string.Join
doit utiliser les éléments dans l'ordre, donc de la parallélisation de leur génération est déplacée.