Angenommen, ich habe eine Zeichenfolge, zum Beispiel
string snip = "</li></ul>";
Ich möchte es grundsätzlich mehrmals schreiben, abhängig von einem ganzzahligen Wert.
string snip = "</li></ul>";
int multiplier = 2;
// TODO: magic code to do this
// snip * multiplier = "</li></ul></li></ul>";
EDIT: Ich weiß, dass ich leicht meine eigene Funktion schreiben kann, um dies zu implementieren. Ich habe mich nur gefragt, ob es einen seltsamen String-Operator gibt, von dem ich nichts wusste
c#
string
extension-methods
trotz
quelle
quelle
Antworten:
In .NET 4 können Sie dies tun:
quelle
operator*
darstellt. Für jeden das Richtige, denke ich.Beachten Sie, dass, wenn Ihre "Zeichenfolge" nur ein einzelnes Zeichen ist, der Zeichenfolgenkonstruktor überlastet ist, um damit umzugehen:
quelle
Leider / zum Glück ist die String-Klasse versiegelt, sodass Sie nicht davon erben und den Operator * überladen können. Sie können jedoch eine Erweiterungsmethode erstellen:
quelle
Ich bin mit DrJokepu in diesem Fall , aber wenn Sie aus irgendeinem Grund mit der integrierten Funktionalität schummeln wollten, können Sie Folgendes tun:
Oder wenn Sie .NET 4 verwenden:
Persönlich würde ich mich aber nicht darum kümmern - eine benutzerdefinierte Erweiterungsmethode ist viel schöner.
quelle
Nur der Vollständigkeit halber - hier ist eine andere Möglichkeit, dies zu tun:
Ich glaube, ich habe das vor einiger Zeit aus Stack Overflow gezogen, also ist es nicht meine Idee.
quelle
Sie müssten eine Methode schreiben - natürlich könnte es sich bei C # 3.0 um eine Erweiterungsmethode handeln:
dann:
quelle
string.Join
es auch - warum nicht einfach n-mal schleifen? Viel direkter.Ein wenig spät (und nur zum Spaß), wenn Sie den
*
Operator wirklich für diese Arbeit verwenden möchten , können Sie dies tun:Und so:
Beachten Sie, dass, solange Sie in der Lage sind , ein vernünftiges Verhalten für sie zu finden, können Sie auch andere Betreiber durch handhaben
StringWrap
Klasse, wie\
,^
,%
etc ...PS:
Multiply()
Verlängerungsguthaben an @DrJokepu Alle Rechte vorbehalten ;-)quelle
Das ist viel prägnanter:
Der Namespace
using System.Text;
sollte in diesem Fall importiert werden.quelle
quelle
Wenn Sie .Net 3.5, aber nicht 4.0 haben, können Sie System.Linqs verwenden
quelle
String.Concat
, und auf 3.5 benötigen Sie sie auch.ToArray()
. Ich fürchte, nicht die eleganteste Lösung.Da jeder seine eigenen .NET4 / Linq-Beispiele hinzufügt, kann ich auch meine eigenen hinzufügen. (Grundsätzlich ist es DrJokepus, reduziert auf einen Einzeiler)
quelle
Okay, hier ist meine Meinung zu diesem Thema:
Ich bin natürlich ein bisschen albern, aber wenn ich Tabellen in Code-generierenden Klassen haben muss, erledigt Enumerable.Repeat das für mich. Und ja, die StringBuilder-Version ist auch in Ordnung.
quelle
Hier ist meine Meinung dazu nur zum späteren Nachschlagen:
quelle
ParallelEnumerable
in solchen Situationen nicht wirklich .string.Join
muss die Elemente in der richtigen Reihenfolge verwenden, sodass eine Parallelisierung ihrer Generierung nicht erforderlich ist.