it-swarm.com.de

Was bedeutet es, ein @ vor einen C # -Variablennamen zu setzen?

Ich habe mit C # -Altercode gearbeitet und viele @ -Symbole vor Variablennamen gesehen. Was bedeutet das?

Derzeit sehe ich viel vor Variablen mit gebräuchlichen Namen, die nicht reserviert sind. Z.B.:

MyProcedure(@step.LoadInstanceId, @step.ResultCode, @step.StatusCode);

Wenn dieser Schritt kein reserviertes Wort ist, gibt es einen Grund, warum sie entkommen sollten?

132
Orion Adrian

Es ist nur eine Möglichkeit, reservierte Schlüsselwörter als Variablen zu deklarieren.

void Foo(int @string)
182
ripper234

Hiermit können Sie ein reserviertes Wort, z. B. 'public', als Variablennamen verwenden.

string @public = "foo";

Ich würde dies nicht empfehlen, da dies zu unnötiger Verwirrung führen kann.

34
rg01

Wenn Sie ein @ vor eine Zeichenfolge stellen, wird der Compuler angewiesen, Escape-Sequenzen in der Zeichenfolge nicht zu verarbeiten.

Von die Dokumentation :

Der Vorteil von @ -quoting ist, dass Escape-Sequenzen nicht verarbeitet werden, was das Schreiben beispielsweise eines vollqualifizierten Dateinamens vereinfacht:

@"c:\Docs\Source\a.txt"  // rather than "c:\\Docs\\Source\\a.txt"

Um ein doppeltes Anführungszeichen in eine @ -Anführungszeichenfolge einzufügen, verdoppeln Sie es:

@"""Ahoy!"" cried the captain." // "Ahoy!" cried the captain.

Eine andere Verwendung des @ -Symbols besteht darin, referenzierte (/ reference) Bezeichner zu verwenden, die zufällig C # -Schlüsselwörter sind. Weitere Informationen finden Sie unter 2.4.2 Bezeichner .

15
Gabe Hollombe

Dies entgeht reservierten Wörtern in C #.

5
Jacob Carpenter

Die ursprüngliche Frage fragt nach einem Grund, warum man einem nicht reservierten Wort entkommen würde. Mir fällt ein, dass das Codebeispiel immer noch kompiliert wird, wenn step in Zukunft ein reserviertes Wort wird. Ich denke, es ist auch eine gültige Option für Codegeneratoren.

3
mklein

Das @ -Zeichen wird mit Bezeichnern verwendet, die mit Sprachschlüsselwörtern identisch sind. Hierfür gibt es zwei Hauptverwendungen: die Interaktion mit Nicht-C # -Code. In Sprachen wie VB oder IronPython sind die Schlüsselwörter nicht die gleichen wie in C # und sie haben möglicherweise Klassen und Eigenschaften mit Namen deklariert, die mit C # -Schlüsseln übereinstimmen. Wenn diese Funktion nicht vorhanden wäre, wäre dieser Code nicht vorhanden Zugriff in C # - maschinengeneriertem Code Wenn ein Codegenerator Code auf der Grundlage einer externen Quelle (z. B. WSDL) generiert, kann der Generator allen Bezeichnern nur das Zeichen @ voranstellen und keine Bezeichner überprüfen und konvertieren, die mit C # -Schlüsseln übereinstimmen.

Sind Sie sicher, dass Ihr Fall nicht der zweite ist?

2
Stilgar