Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
@ vor String
lebes
myCSharp.de - Member



Dabei seit:
Beiträge: 82

Themenstarter:

@ vor String

beantworten | zitieren | melden

Hallo,

bin ziemlicher C# Neuling. Hab jetzt schon öfter bei der Zuweisung eines Strings den Klammeraffen @ gesehen. Sicher eine banale Frage, aber wofür steht dieser?

Gruß
private Nachricht | Beiträge des Benutzers
norman_timo
myCSharp.de - Member

Avatar #avatar-1775.jpeg


Dabei seit:
Beiträge: 4.506
Herkunft: Wald-Michelbach (Odw)

beantworten | zitieren | melden

Hallo lebes,

du brauchst innerhalb vom String keine Escape-Sequenzen mehr angeben, da alles als Text behandelt wird.

Das heißt, dass z.B. Pfadangaben nicht mehr mit einem Doppelbackslash angegeben werden müssen...

Gruß
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
private Nachricht | Beiträge des Benutzers
AtzeX
myCSharp.de - Member



Dabei seit:
Beiträge: 217

beantworten | zitieren | melden

Gefunden im MSDN
Zitat
Der Vorteil der @-Schreibweise besteht darin, dass Escapesequenzen nicht verarbeitet werden, wodurch z. B. das Schreiben vollqualifizierter Namen erleichtert wird:
@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"

Gruß,
AtzeX

Edit:
Mist, zu langsam.
@norman_timo:
Klasse Signatur!
private Nachricht | Beiträge des Benutzers
typhos
myCSharp.de - Member



Dabei seit:
Beiträge: 243

beantworten | zitieren | melden

... außerdem sind somit mehrzeilige Strings möglich, wie:

string test = @"dies ist ein
mehrzeiliger
text";
private Nachricht | Beiträge des Benutzers
capcom
myCSharp.de - Member



Dabei seit:
Beiträge: 103
Herkunft: Bayreuth

beantworten | zitieren | melden

Guten Morgen,

der Thread ist zwar schon älter, aber ich habe eine Frage, die hier eigentlich genz gut mit rein passt. Also wie schon gesagt wurde kann ich mit dem @ vor einem String die Interpretation von \... verhindern. Jetzt möchte ich das gern auf Strings in Variablen anwenden, was mir bisher nicht gelang.

Konkretes Beispiel.


public void WriteInFile(string text, string file)
{
  FileStream handle = new FileStream(file, ...);
}

Ich bekomme per Parameter irgendeine Datei mit Pfad übergeben, z.B. "c:\temp\irgendwas.txt".
Diesen Parameter übergebe ich FileStream, was mir den Fehler "Illegales Zeichen im Pfad" bringt, weil er das \t von c:\temp und das \i von temp\irgendwas als Anweisung sieht. Ich könnte natürlich vorher den Parameter bearbeiten und z.B. mit


file = file.Replace(@"\", "/");

die Backslashes umdrehen.

KORREKTUR: Nicht mal das funktioniert. Bisher kriege ich den Code nur zum laufen, wenn ich den Dateinamen von vorne herein mit / statt \ übergebe.

Ich frage mich nur, ob es nicht eine einfachere Möglichkeit gibt, die quasi sowas entspräche:


public void WriteInFile(string text, string file)
{
  FileStream handle = new FileStream(@file, ...);
}

Also dass generell der String in der Variablen (wie er auch aussehen mag) nicht interpretiert wird. Gibt es sowas?

Danke für Eure Beiträge :-)
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von capcom am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo capcom,

wenn in einer Variablen \ und t hintereinander stehen, dann wird daraus kein Tabzeichen. Es muss also in deinem Pfad schon echt ein Tabzeichen enthalten sein, wie immer das da rein gekommen ist. Du musst also verhindern, dass das Tabzeichen in die Variable überhaupt erst reinkommt. Das halte ich für die einzig sinnvolle Lösung. Das Tabzeichen durch @"\t" zu ersetzen, halte ich für gefährlich.

herbivore
private Nachricht | Beiträge des Benutzers
capcom
myCSharp.de - Member



Dabei seit:
Beiträge: 103
Herkunft: Bayreuth

beantworten | zitieren | melden

Hallo herbivore,

hm dann kann ich mir das Verhalten des Programms im Moment nicht logisch erklären. Übergebe ich als Datei statt "c:\temp\..." nämlich "c:/temp/...", dann bekomme ich keinen Fehler.
Der "Trick" mit dem Replace, den ich vorher erwähnte, hat übrigens auch nicht funktioniert, also habe ich momentan keine Idee, wie man sowas universell ausschließen könnte. Mal sehen was ich noch entdecke.

Ich muß doch irgendwie nachträglich abfangen können wenn der Anwender später mal seine Pfade mit \ eingibt, wie er es unter Windows gewöhnt ist.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von capcom am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo capcom,

wo übergibst du "c:\temp\..." und wie? Als String-Literal? Wenn ja, dann musst du an der Stelle das @ davorsetzen.

herbivore
private Nachricht | Beiträge des Benutzers
capcom
myCSharp.de - Member



Dabei seit:
Beiträge: 103
Herkunft: Bayreuth

beantworten | zitieren | melden

Hallo herbivore,

ich bin ein Rindvieh ;-) Ich habe mir die ganze Zeit den Kopf über ein Problem zerbrochen, das scheinbar gar keins ist *g* Wenn ich den Pfad per ReadLine von der Konsole aus einlese, scheint das Verhalten von vornherein ein Anderes zu sein. Da wird irgendwie gar nix interpretiert.
Wenn mans wo hart codiert - wie ich es jetzt zum testen gemacht habe und die Probleme auftraten - muß man halt dran denken, aber dafür hat Dein vorheriger Vorschlag funktioniert.

Sorry für die Umstände :-)
private Nachricht | Beiträge des Benutzers