2011-08-18 13 views
9

Esiste un modo per imporre l'utilizzo della parola chiave this in Visual Studio quando si fa riferimento ai membri dell'istanza corrente?Posso forzare l'uso della parola chiave 'this' in C# .NET?

Esempio con un bug nel costruttore:

class MyClass 
{ 
    public object Foo { get; set; } 
    public MyClass(object foo) 
    { 
     Foo = Foo; // this should of course be lowercase but it's easy to miss 
    } 
} 

Questo codice sarà probabilmente genererà il 'object reference not set to an instance of an object' eccezione infame da qualche parte in seguito.

Come per farlo funzionare, ma ancora è facile perdere:

class MyClass 
{ 
    public object Foo { get; set; } 
    public MyClass(object foo) 
    { 
     Foo = foo; // Valid syntax but unclear. 
    } 
} 

Questa è la sintassi valida ma è facile perdere.

La sintassi mi piacerebbe Visual Studio rispettare:

class MyClass 
{ 
    public object Foo { get; set; } 
    public MyClass(object foo) 
    { 
     this.Foo = foo; // this is "safe". 
    } 
} 

Se questa convenzione viene applicata avrei dovuto digitare this.Foo = this.Foo per creare lo stesso tipo di bug come nel primo esempio.

Uso sempre la parola chiave this poiché mi semplifica la vita passando da C# a altre lingue, quindi non ci sono assolutamente svantaggi.

+2

Visual Studio ti avvisa quando fai il primo errore se usi fxcop –

+0

Come hai detto non penso che farebbe alcuna differenza per il problema che stai avendo, ti suggerirei di cambiare il nome del parametro invece di qualcosa come 'bar', in questo modo non avresti alcun problema. – atoMerz

risposta

12

È possibile risolvere questo problema semplicemente abilitando "Tratta gli avvisi come errori":

Attenzione 2 funzione assegnata ad stessa variabile; intendevi assegnare qualcos'altro?

(CS1717 se si desidera attivare solo per questo)

Il compilatore ti dice già su questo; dovresti rivedere gli avvertimenti (e mirare a zero avvisi).

Re al centro un essere chiaro:

Foo = foo; 

Non sono d'accordo - che è perfettamente chiaro a me (a meno che non provenga da un ambiente VB e hanno sviluppato caso cecità).

+2

Quello che intendeva è che non puoi mai scrivere "Foo" se intendi "this.Foo', che intendi nel secondo esempio. Quindi, la sua strada avrebbe catturato quella –

+0

In effetti, ma hai scritto che sarebbe ancora un errore che non è vero –

+0

@Oskar ok - modificato; meglio? –

5

No, non è possibile modificare il comportamento della lingua in questo modo. Se usi ReSharper I credi allo puoi dire che segnala questo tipo di cose - potrebbe non comparire nell'elenco degli errori, ma al margine e in una "spia" per la salute generale del file.

io personalmente non tendono perdere troppo sonno per questo genere di cose, in quanto è solito evidente non appena si prova - posso solo ricordare uno scenario in cui è davvero mi ha morso, che è stato quando Ho finito con un overflow dello stack (non esattamente la stessa situazione, ma di nuovo un problema di involucro) all'interno di un inizializzatore di tipo, eseguito su Windows Phone 7 - una miscela di difficili ambienti di debug, in pratica.

+0

Sono d'accordo, mi è venuta l'idea durante i test unitari quindi non è un grosso problema. Ho solo pensato che sarebbe stata una caratteristica "bella da avere". –

2

È possibile creare avvisi personalizzati e gli errori che utilizzano FxCop \ Analisi visiva Studio Codice

+2

c'è un avvertimento del compilatore esistente; Non è richiesta alcuna regola personalizzata –

+0

Intendevo dire che è possibile creare un avviso personalizzato che notificherà l'accesso alle proprietà locali senza "questo" – sternr

+0

Questa è la strada da percorrere se si vuole essere pedanti al riguardo. +1 –

3

È possibile utilizzare StyleCop per generare un avviso se non si prefisso con questo. Puoi eseguire StyleCop come parte del processo di creazione seguendo questi these instructions

StyleCop viene fornito con una serie di regole predefinite, molte delle quali terribili, ma puoi modificare il tuo file delle regole per avere più senso per i tuoi sviluppatori. Puoi anche condividere il file StyleCop in modo che le modifiche vengano immediatamente replicate a tutti i tuoi sviluppatori.

È una soluzione abbastanza semplice, gratuita, fornita da Microsoft e se si arriva con un set di regole adatto, gli sviluppatori creeranno un codice molto più "ordinato". È anche possibile creare regole personalizzate sulla falsariga di "I metodi non dovrebbero essere troppo lunghi" dove si definisce la lunghezza. Un sacco di cose con cui giocare.

Suppongo inoltre che sia possibile impostare gli avvisi come errori, ma se si è sicuri che le impostazioni di StyleCop siano esattamente come le si desidera.

+0

Che grande strumento! Ho usato FxCop ma questo è un bel complemento. –

Problemi correlati