2009-07-19 22 views
8

Durante la lettura di un libro su C#, ho trovato codice che utilizza @ per "sovraccaricare" o utilizzare una parola chiave C# come identificativo. Immagino che questa non sia una buona pratica, in quanto conduce all'ambiguità. Ho ragione nel pensarlo, o ci sono momenti in cui questo dovrebbe essere usato?Best practice per l'utilizzo di @ in C#

risposta

18

In effetti, vale quasi sempre la pena di evitarlo. Il tempo valido valido è utile quando si ha a che fare con una libreria esterna (di un'altra lingua) che ha una classe/etc che sembra essere una parola chiave C#, ma ammetto che ho mai avuto questo problema in realtà. È utile che C# ti consenta di rinominare i nomi degli argomenti dei metodi quando esegui l'override o l'implementazione delle interfacce, in modo da evitare una serie di casi comuni.

Un altro utilizzo (discutibilmente pigro) è nella generazione del codice; se anteponi sempre i campi/variabili/ecc con @theName, non devi preoccuparti di casi speciali. Personalmente, faccio semplicemente un controllo incrociato con un elenco di parole chiave C#/parole chiave contestuali e aggiungo qualcosa come il carattere di sottolineatura.

L'altro uso del simbolo @ (letterali stringa letterale) è @ "molto più utile".

+0

Grazie Marc! Questo è veramente utile. –

+3

"\\ Is \\ VERY \\ useful" @ "non \ you \ think?" –

+1

Un caso d'uso per @ che ho incontrato è in ASP.NET MVC quando è necessario passare un tipo anonimo con una proprietà con nome di una parola chiave C# come 'Html.Action (..., new {..., @ class = "Test"}); ' –

1

ho usato solo e visto usato con le corde solo, come:

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

Penso che sia più utilizzabile quando la stringa contiene \ così che non è necessario evitarlo. –

1

mai saputo di questo, ma da quello che dici eviterei esso.

L'unica volta che uso @ in C# è per le stringhe pre-formattate.

+1

Penso che intendessi i backslash –

+0

Infatti l'ho fatto;) – Finglas

17

L'ho usato in ASP.net MVC Visualizzazioni in cui si sta definendo una classe css utilizzando un HtmlHelper.

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

Bel esempio ... –

4

Penso che sia una cattiva idea avere parole chiave riservate come nomi di variabili. IMHO rende il codice meno leggibile. Anche se ci sono alcuni casi in cui potrebbe essere utile. Per esempio in un ASP.NET MVC View si potrebbe scrivere:

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

lo evito, se non con i metodi di estensione, dove penso che aiuta la leggibilità:

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

non credi che quel codice causi più confusione visto che stai già definendo 'questo'? preferirei semplicemente usare una convenzione di denominazione come 'questo oggetto o', come la gente definisce 'i' come il nome della variabile per ints. for (int i = 0; i> ... – David

+0

Non penso che causi alcuna confusione Ricorda, quando definisci un metodo di estensione, uno dei parametri serve come l'equivalente di "this" in un metodo normale Penso che chiamarlo @ enfatizza questo fatto, in particolare quando si guarda il codice –

+2

Ancora meglio sarebbe venire con un nome parametro che in realtà significa qualcosa. :) – Guffa

1

Si può evitare tranquillamente tutto ciò che crea confusione. :-)

L'unico posto che uso @ è con le stringhe.

Da MSDN: Il vantaggio di @ -quoting è che le sequenze di escape non vengono elaborati, che lo rende facile scrivere, ad esempio, un nome di file completo:

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

4

Come altri hanno ha sottolineato @ -quotare può essere molto utile con le stringhe. Ecco alcuni esempi:

// 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

Tendo ad usarlo sempre. Molto più facile quindi sfuggire ai personaggi. – corymathews