2009-07-19 8 views
8

Während ich ein Buch über C# gelesen habe, bin ich auf Code gestoßen, der das @ verwendet, um zu "überladen" oder ein C# -Schlüsselwort als Kennung zu verwenden. Ich vermute, das ist keine gute Praxis, da es zu Zweideutigkeiten führt. Habe ich Recht, dies zu denken, oder gibt es Zeiten, in denen dies verwendet werden sollte?Best Practices für die Verwendung von @ in C#

Antwort

18

In der Tat lohnt es sich fast immer, dies zu vermeiden. Die wichtigste gültige Zeit, die es nützlich sein kann, ist mit einer externen Bibliothek (aus einer anderen Sprache), die eine Klasse/etc, die ein C# Schlüsselwort ist, aber ich gebe nie hatte dieses Problem in Wirklichkeit. Es hilft, dass C# beim Überschreiben/Implementieren von Schnittstellen das Umbenennen von Methodenargumentnamen zulässt, sodass ein gemeinsamer Satz von Fällen vermieden wird.

Eine andere (wohl faule) Verwendung ist in der Code-Generierung; Wenn Sie Felder/Variablen/etc immer mit @theName voranstellen, müssen Sie sich nicht um spezielle Fälle kümmern. Persönlich vergleiche ich einfach eine Liste mit C# -Schlüsselwörtern/kontextbezogenen Schlüsselwörtern und füge etwas wie Unterstreichung hinzu.

Die andere Verwendung des @ -Symbols (wörtliche Zeichenfolgenliterale) ist @ "viel nützlicher".

+0

Danke Marc! Das ist sehr hilfreich. –

+3

"\\ Ist \\ SEHR \\ nützlich" @ "nicht \ you \ Think?" –

+1

Ein Anwendungsfall für @, den ich festgestellt habe, ist in ASP.NET MVC, wenn Sie einen anonymen Typ mit einer Eigenschaft mit dem Namen eines C# -Schlüsselwortes wie 'Html.Action (..., new {..., @) übergeben müssen. class = "Test"}); ' –

1

Ich habe nur verwendet und gesehen mit den Saiten nur verwendet, wie:

string [email protected]"some funny name"; 
+1

Ich denke, es ist mehr verwendbar, wenn die Zeichenfolge \ enthält, so dass Sie nicht entkommen müssen. –

1

nie darüber wussten, aber von dem, was Sie sagen, ich würde es vermeiden.

Die einzige Zeit, die ich @ in C# verwende, ist für vorformatierte Strings.

@"String\no\need\to\escape\slashes" 
+1

Ich denke, du meintest Backslashes –

+0

In der Tat habe ich;) – Finglas

17

Ich habe es in asp.net MVC Ansichten verwendet, wo Sie eine CSS-Klasse mit einem HtmlHelper definieren.

<%= Html.TextBox("Name", null, new { @class = "form-field" }) %> 
+0

Schönes Beispiel ... –

4

Ich denke, es ist eine schlechte Idee, Schlüsselwörter als Variablennamen reserviert haben. IMHO macht es den Code weniger lesbar. Obwohl es einige Fälle gibt, in denen es nützlich sein könnte. Zum Beispiel in einer ASP.NET MVC-Ansicht könnten Sie schreiben:

<%= Html.TextBox("name", new { @class = "some_css_class" }) %> 
0

ich es vermeiden, es sei denn mit Erweiterungsmethoden, wo ich denke, es hilft Lesbarkeit:

public static void Foo(this object @this) 
{ 
    Console.WriteLine(@this.ToString()); 
} 
+3

würden Sie nicht denken, dass Code tatsächlich mehr Verwirrung verursacht, da Sie bereits "dieses" definieren? Ich würde es vorziehen, nur eine Benennungskonvention wie "dieses Objekt o" zu verwenden, so wie Leute "i" als Variablennamen für Ints definieren. für (int i = 0; i> ... – David

+0

Ich glaube nicht, dass es zu Verwirrung führt. Denken Sie daran, wenn Sie eine Erweiterungsmethode definieren, dient einer der Parameter als Äquivalent zu "this" in einer gewöhnlichen Methode Ich denke, es zu nennen, betont diese Tatsache, besonders wenn man den Code betrachtet. –

+2

Noch besser wäre es, einen Parameternamen zu finden, der eigentlich etwas bedeutet. :) – Guffa

1

Sie sicher alles vermeiden können, die erzeugt Verwechslung. :-)

Der einzige Ort, an dem ich @ benutze, ist mit Strings.

Von MSDN: Der Vorteil @ -quoting ist, dass Escape-Sequenzen nicht verarbeitet werden, das macht es einfach zu schreiben, beispielsweise ein vollständig qualifizierter Dateiname:

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

4

Wie andere haben hingewiesen @ @Quoten kann sehr nützlich sein mit Strings. Hier sind einige Beispiele:

// Not having to escape backslashes. 
String a = @"C:\Windows\System32"; 

// Escaping quotes. 
String b = @"The message is ""{0}""."; 

// String with embedded newlines. 
String c = @"An error occured. 
Please try again later. 
"; 
+0

Ich neige dazu, die ganze Zeit zu verwenden. Viel einfacher als die Charaktere zu entkommen. – corymathews