Ich habe diese String-Erweiterung eine Weile zurückgeschrieben, und ich bekomme tatsächlich ziemlich viel Nutzen daraus.
%Vor%Da es jetzt in all meinen Projekten ist, frage ich mich, ob ich es besser hätte machen können. Effizienter oder würde es auf jeden Fall zu unerwarteten Ergebnissen führen?
Scheibe. Es funktioniert wie Pythons Array-Notation.
%Vor% Viele andere Sprachen haben auch so etwas. string.Slice(1)
entspricht string.Substring(1)
. string.Substring(1,-1)
schneidet das erste und letzte Zeichen ab. string.Substring(null,null,-1)
wird die Zeichenfolge umkehren. string.Substring(step:2)
gibt eine Zeichenkette mit jedem anderen Zeichen zurück ... ähnlich wie bei JS-Slice , aber mit einem zusätzlichen Argument .
Aufgrund Ihrer Vorschläge erneut überarbeitet:
%Vor%Wenn Sie viele Testfälle haben, sollte die Erkennung unerwarteter Ergebnisse kein Problem darstellen, wenn Sie mit verschiedenen Implementierungen experimentieren möchten.
Aus einer API-Perspektive würde ich optionale Argumente anstelle von Nullable-Ints betrachten.
>Aktualisieren
Nachdem ich den Code genau gelesen habe, kann ich sehen, dass das Geben von "start" und "end" einen Wert von null hat, wenn man "step" in Betracht zieht. Daher konnten sie nicht als optionale int-Parameter dargestellt werden sie könnten jedoch immer noch optionale Parameter sein.
Wenn man sich den Code näher ansieht, ist es ein bisschen eine funky API, da die Werte der einzelnen Parameter sich gegenseitig beeinflussen. Mein vorheriger Kommentar spielt darauf an. Sie müssen wirklich die Implementierung kennen, um das auszuarbeiten, im Allgemeinen kein guter API-Aspekt. Und macht möglicherweise eine schwierige Lesbarkeitserfahrung.
Ich kann sehen, wie "step" verwendet werden kann, um eine Zeichenfolge umzukehren, was möglicherweise nützlich ist. Aber wäre eine Reverse-Extension-Methode dafür nicht besser? Viel besser lesbar und weniger von einem mentalen Speedbump.
Ich kann 3 Dinge sehen, sehr, sehr kleine
ändere das innere if in ternär wie
%Vor%Ändern Sie möglicherweise (int) int? in int.Value
ändern
%Vor%in
%Vor%und die große Frage ist, wenn es tut was es braucht, warum es reparieren?
update, um zu zeigen, wie man es mit LINQ macht, viel langsamer (gibt es eine Möglichkeit, es zu beschleunigen?)
%Vor% Wenn ich Python nach "abcdefghijklmn"[::6]
frage, gibt es 'agm'
zurück, aber wenn ich Ihre Funktion nach "abcdefghijklmn".Slice(step:6)
frage, gibt es "ag"
zurück.
Ich würde empfehlen, die falsche length
-Berechnung zu entfernen und Ihre Schleife einfach so auszuführen: