Załóżmy, że mam na przykład ciąg
string snip = "</li></ul>";
Zasadniczo chcę napisać to wiele razy, w zależności od jakiejś wartości całkowitej.
string snip = "</li></ul>";
int multiplier = 2;
// TODO: magic code to do this
// snip * multiplier = "</li></ul></li></ul>";
EDYCJA: Wiem, że mogę łatwo napisać własną funkcję, aby to zaimplementować, po prostu zastanawiałem się, czy jest jakiś dziwny operator ciągu, o którym nie wiedziałem
c#
string
extension-methods
pomimo
źródło
źródło
Odpowiedzi:
W .NET 4 możesz to zrobić:
źródło
operator*
reprezentuje plik binarny . Chyba każdy z nich.Zwróć uwagę, że jeśli Twój „ciąg” jest tylko pojedynczym znakiem, konstruktor stringów jest przeciążony, aby go obsłużyć:
źródło
Niestety / na szczęście klasa string jest zapieczętowana, więc nie można po niej dziedziczyć i przeciążać operatora *. Możesz jednak utworzyć metodę rozszerzenia:
źródło
Jestem z DrJokepu w tej sprawie , ale jeśli z jakiegoś powodu chciałeś oszukiwać za pomocą wbudowanej funkcjonalności, możesz zrobić coś takiego:
Lub, jeśli używasz .NET 4:
Osobiście nie zawracałbym sobie głowy - niestandardowa metoda rozszerzenia jest znacznie przyjemniejsza.
źródło
Gwoli ścisłości - oto inny sposób na zrobienie tego:
Myślę, że jakiś czas temu wyciągnąłem to z Stack Overflow, więc to nie jest mój pomysł.
źródło
Musiałbyś napisać metodę - oczywiście w C # 3.0 może to być metoda rozszerzająca:
następnie:
źródło
string.Join
- dlaczego nie po prostu zapętlić n razy? O wiele bardziej bezpośredni.Trochę późno (i dla zabawy), jeśli naprawdę chcesz użyć
*
operatora do tej pracy, możesz zrobić to:A więc:
Należy pamiętać, że tak długo, jak jesteś w stanie znaleźć rozsądne zachowanie dla nich, można również obsługiwać inne podmioty za pośrednictwem
StringWrap
klasy, jak\
,^
,%
itp ...PS:
Multiply()
rozszerzenie kredytów do @DrJokepu wszelkie prawa zastrzeżone ;-)źródło
To jest o wiele bardziej zwięzłe:
W
using System.Text;
takim przypadku należy zaimportować przestrzeń nazw .źródło
źródło
Jeśli masz .Net 3.5, ale nie 4.0, możesz użyć System.Linq
źródło
String.Concat
, a na 3.5 również potrzebujesz.ToArray()
. Obawiam się, że nie jest to najbardziej eleganckie rozwiązanie.Ponieważ każdy dodaje własne przykłady .NET4 / Linq, równie dobrze mogę dodać własne. (Zasadniczo to DrJokepu's, zredukowana do jednej linijki)
źródło
OK, oto moje podejście do sprawy:
Jestem oczywiście trochę głupi, ale kiedy potrzebuję tabulacji w klasach generujących kod, Enumerable.Repeat robi to za mnie. I tak, wersja StringBuilder też jest w porządku.
źródło
Oto moje podejście do tego w przyszłości:
źródło
ParallelEnumerable
w takich sytuacjach.string.Join
musi używać elementów w kolejności, więc równoległe ich generowanie nie jest potrzebne.