Laden...

String enthält bei der Ausgabe mehr Backslashes als im String-Literal stehen

Erstellt von Hans18 vor 11 Jahren Letzter Beitrag vor 11 Jahren 856 Views
Thema geschlossen
H
Hans18 Themenstarter:in
13 Beiträge seit 2013
vor 11 Jahren
String enthält bei der Ausgabe mehr Backslashes als im String-Literal stehen

Guten Morgen,

ich muss einen Regex-String aus mehren Literalen zusammenfügen. Ich habe aber nun das Problem, dass Escape-Zeichen dupliziert sind. Beispiel:

public const string P1 = @"\\SAP[0-9]"
public const string CDS = @"\\CPRD[0-9]"
		
public static string PatternTest = P1 + CDS;

Ergibt laut Console.Writeline

\\\\SAP[0-9]\\\\CPRD[0-9]""

Wenn ich den Pattern in Expresso verwende geht es. Aber in C# wegen diesem Fehler nicht.
Wo ist mein Denkfehler????

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Hans18,

das kann ich nicht bestätigen:


using System;

static class App
{
   public const string P1 = @"\\SAP[0-9]";
   public const string CDS = @"\\CPRD[0-9]";

   public static string PatternTest = P1 + CDS;

   public static void Main (string [] astrArg)
   {
      Console.WriteLine (PatternTest);
   }
}

liefert

\\SAP[0-9]\\CPRD[0-9]

Wenn du Literale mit @ verwendest (siehe [FAQ] Was bedeutet das @ (=at) vor String-Literalen? Und: Wissenswertes zu Escape-Sequenzen), sind im resultierenden String(-Objekt) soviele Backslashes enthalten, wie du ins Literal hineinschreibst. Nicht mehr und nicht weniger.

Fügt man zwei solche Strings zusammen, dann werden sie einfach aneinander gehängt, ohne dass sich die Gesamtzahl der Backslashes verändert.

Sollten später tatsächlich mehr Backslashes angezeigt werden, dann sind sie durch eine spätere Änderung entstanden. Da müsstest du mal suchen.

BTW: Man darf nicht auf den Debugger hineinfallen, denn der doppelt alle Backslashes bei der Anzeige von Variableninhalten.

String, String-Literale und String-Operationen fallen allerdings unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

Thema geschlossen