Benutzer mit den meisten Antworten
c# String Escapezeichen

Frage
-
Hallo zusammen,
ich habe leider über die Suche keine passende Antwort auf meine Frage bekommen oder ich habe einfach einen Denkfehler.
Ich erhalte über
System.Security.Principal.WindowsIdentity.GetCurrent().Name
den derzeitigen User in einen String.
Dieser String hat dann bei mir das Format <Domäne>\\<Username>. Da ich den Username in eine Datenbank schreiben will, möchte ich gern das \\ durch \ ersetzen und nutze dafür die string.Replace Funktion.
user.Replace("\\\\",@"\");
allerdings liefert mir das wieder den String mit \\ ich habe schon sämtliche Kombinationen getestet aber bekomme es einfach nicht zu einem einfachen Backslash konvertiert.
Ich hoffe jemand kann mir einen Tipp geben. :)
Danke im Voraus!
Antworten
-
Hallo Stefan,
das Problem mit dem doppelten Backslash hast Du maximal in der Anzeige. Bei der Weiterverarbeitung ist das schon korrekt.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Stefan Jakob Donnerstag, 30. Juni 2016 07:42
-
Hallo Stefan Jakob,
die Frage ist wie du dir hast ausgeben lassen was dir dein Einzeiler zurück gibt. Die Überwachen-Fenster sowie die DataTips vom Visual Studio Debugger zeigen die Werte nämlich in der Syntax der jeweiligen Programmiersprache an. Wenn du also ein \ im String stehen hast, wird entsprechend ein "\\" im Debugger angezeigt.
Gibst du das ganze Dagegen im Ausgabefenster (Debug.WriteLine), der Konsole (Console.WriteLine) oder irgendwie anders direkt in deinem Programm aus, dann siehst du auch nur einen \. Genauso verhält es sich wenn du den String in die Datenbank schreibst, diese wird ohne dem Aufruf von Replace auch nur ein \ erhalten.
Wie dir vielleicht bekannt ist hängt das ganze mit den Escapesequenzen zusammen. Denn einige Kombinationen mit vorangestelltem \ sind spezielle Zeichen (Zeilenumbrüche mit \r und \n, ...). \\ ergibt entsprechend den normalen \. In Verbatim-Strings mit @ dagegen gibt es keine Escapesequenzen in dieser Form.
Soweit die Erklärung zu dem "Phänomen".
@Marcus So funktioniert das hier nicht. Das @ hilft nur direkt vor Stringliteralen um darauf Verbatim-Strings zu machen. Überall anders braucht man es auch gar nicht.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Stefan Jakob Donnerstag, 30. Juni 2016 07:42
Alle Antworten
-
Hallo Stefan,
das Problem mit dem doppelten Backslash hast Du maximal in der Anzeige. Bei der Weiterverarbeitung ist das schon korrekt.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Stefan Jakob Donnerstag, 30. Juni 2016 07:42
-
Hallo Stefan Jakob,
die Frage ist wie du dir hast ausgeben lassen was dir dein Einzeiler zurück gibt. Die Überwachen-Fenster sowie die DataTips vom Visual Studio Debugger zeigen die Werte nämlich in der Syntax der jeweiligen Programmiersprache an. Wenn du also ein \ im String stehen hast, wird entsprechend ein "\\" im Debugger angezeigt.
Gibst du das ganze Dagegen im Ausgabefenster (Debug.WriteLine), der Konsole (Console.WriteLine) oder irgendwie anders direkt in deinem Programm aus, dann siehst du auch nur einen \. Genauso verhält es sich wenn du den String in die Datenbank schreibst, diese wird ohne dem Aufruf von Replace auch nur ein \ erhalten.
Wie dir vielleicht bekannt ist hängt das ganze mit den Escapesequenzen zusammen. Denn einige Kombinationen mit vorangestelltem \ sind spezielle Zeichen (Zeilenumbrüche mit \r und \n, ...). \\ ergibt entsprechend den normalen \. In Verbatim-Strings mit @ dagegen gibt es keine Escapesequenzen in dieser Form.
Soweit die Erklärung zu dem "Phänomen".
@Marcus So funktioniert das hier nicht. Das @ hilft nur direkt vor Stringliteralen um darauf Verbatim-Strings zu machen. Überall anders braucht man es auch gar nicht.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Stefan Jakob Donnerstag, 30. Juni 2016 07:42
-
Ich habe mich hier tatsächlich vom Debugger überlisten lassen.
Habe noch keine Ausgabe gemacht, sondern möchte die Daten in eine Datenbank schreiben und habe deshalb einfach im Debugger mal in den String geschaut ob das funktioniert. Das mir die Überwachung im Debugger die Strings mit Escapezeichen anzeigt wusste ich bisher nicht.
Das ist mein erstes Projekt mit C# also wieder was dazu gelernt :)
Danke nochmal!