String über mehrere Zeilen
-
Hallo,
ich habe eine Frage zur "richtigen" Darstellung bzw. Schreibweise von Strings über mehrere Zeilen.
Welche Schreibweise ist zu bevorzugen:String sql = "SELECT * " + "FROM dual " + "WHERE 1=1";
oder
StringBuilder sb = new StringBuilder(); sb.append("SELECT * "); sb.append("FROM dual "); sb.append("WHERE 1=1"); String sql = sb.toString();
-
Ich finde ein Stringbuilder ist einer einfachen String-Konkatination mittels
operator+
immer dann vorzuziehen wenn diese mehr als drei Operationen beansprucht. Stichwort: Immutable Objects
-
Firefighter schrieb:
Ich finde ein Stringbuilder ist einer einfachen String-Konkatination mittels
operator+
immer dann vorzuziehen wenn diese mehr als drei Operationen beansprucht.Nicht immer, jedenfalls nicht, wenn wie hier die Teilstrings konstant sind.
-
Ok das ist natürlich richtig. Aber ich mag es ehrlich gesagt nicht wenn man sich immer auf solche internen Mechanismen verlassen muss/will. Mir gehts um Konsistenz.Natürlich kann man sich dadrauf verlassen, mir persönlich ist es aber lieber wenn ich immer die gleichen Konstrukte sehe als zwischendurch immer was wechselndes.
-
Das hat nichts mit Konsistenz zu tun, da es auch nicht ganz dieselben Konzepte sind. Das eine ist Konkatenation von mehreren Strings zu einem, ganz klar mit dem StringBuilder. Das andere ist Aufhübschung des Quellcodes durch Verteilung von langen Strings auf mehrere Zeilen. Dafür einen Laufzeitmechanismus in Anspruch zu nehmen fühlt sich für mich und hoffentlich für die meisten falsch an.
-
Nee nee ich glaub du hast mich falsch verstanden
Sorry falls dem so war. Natürlich bin ich damit konform das man konstante Strings so behandeln kann.
-
String sql = @"SELECT * FROM dual WHERE 1=1";
Ist im Quellcode ganz hübsch, hat aber Nachteile beim debuggen.
-
String concatenation ist so ein Thema in .NET, dem imo viel zu viel Aufmerksamkeit gewidmet wird. Das was in den meisten Applikationen so an Strings verknüpft wird, das ist eher nicht das Bottleneck im gesamten Code
-
Ich nehm sobald ich Concatenieren muss immer ein Builder.
In den seltensten fällen müsste ich das, sei es weil es keine Auswirkungen auf die Performance hat oder es weniger als 3 sind.
Ich mach es einfach damit es simpel ist und man nicht nachdenken muss.
- Warum der Builder da aber hier nicht
- Kann ich da es verbinden oder muss ich den Builder nehmen
lalala - mir alles egal, immer Builder und feddich.Wenn nicht der Builder bietet sich natürlich auch das string.Format an.
var sql = string.Format("{0} {1} {2}", "SELECT *", "FROM dual", "WHERE 1=1");