2011-08-18 13 views
9

¿Hay alguna manera de forzar el uso de la palabra clave this en Visual Studio al hacer referencia a los miembros de la instancia actual?¿Puedo forzar el uso de la palabra clave 'this' en C# .NET?

Ejemplo con un error en el constructor:

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

Este código probablemente generará el infame 'object reference not set to an instance of an object' excepción alguna parte más adelante.

Cómo hacer que funcione pero aún así es fácil pasar por alto:

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

Esta es una sintaxis válida pero es fácil perderse.

La sintaxis me gustaría hacer cumplir visual studio:

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

Si se aplica esta convención que tendría que escribir this.Foo = this.Foo para crear el mismo tipo de error como en el primer ejemplo.

Siempre uso la palabra clave this de todos modos, ya que me facilita la vida al cambiar entre C# y otros idiomas, por lo que no habría ninguna desventaja en absoluto.

+2

Visual Studio te advierte cuando cometes el primer error si usas fxcop –

+0

Como dijiste, no creo que eso hiciera ninguna diferencia al problema que tenías, te sugiero cambiar el nombre del parámetro en lugar de algo como 'bar', de esta forma no tendrías ningún problema. – atoMerz

Respuesta

12

Puedes solucionar este problema simplemente al permitir que "Tratar a los avisos como errores":

Cuidado de 2 Asignación de hecho a una misma variable; ¿Querías asignar algo más?

(CS1717 si desea habilitar sólo por éste)

El compilador ya se le informa acerca de esto; deberías revisar las advertencias (y apuntar a cero advertencias).

Re el del medio es claro:

Foo = foo; 

estoy de acuerdo - que está perfectamente claro para mí (a menos que usted viene de un fondo VB y ha desarrollado casos y ceguera).

+2

Lo que quiso decir es que nunca se puede escribir 'Foo' si se refiere a' this.Foo', que quiere decir en el segundo ejemplo. Así que su camino atraparía ese –

+0

De hecho, pero usted escribió que todavía sería un error que no es cierto –

+0

@Oskar bien - editado; ¿mejor? –

5

No, no puede cambiar el comportamiento del idioma de esta manera. Si utiliza ReSharper I crea, puede indicarle que marque este tipo de cosas; es posible que no aparezca en la lista de errores, sino en el margen y en una "luz indicadora" para el estado general del archivo.

personalmente no tienden para perder el exceso de sueño durante este tipo de cosas, ya que es generalmente evidente tan pronto como se prueba - Sólo puedo recordar un escenario en el que realmente me ha mordido, que fue cuando Terminé con un desbordamiento de pila (no es exactamente la misma situación, pero de nuevo un problema de la carcasa) dentro de un inicializador de tipo, que se ejecuta en Windows Phone 7, una mezcla de entornos de depuración difíciles, básicamente.

+0

Estoy de acuerdo, se me ocurrió la idea mientras se realizaban las pruebas unitarias, por lo que realmente no es un gran problema. Solo pensé que sería una característica "agradable de tener". –

2

Puede crear avisos personalizados y errores utilizando FXCop \ Análisis

+2

hay una advertencia de compilador existente; no se requiere regla personalizada –

+0

Quiero decir, puede crear una advertencia personalizada que notifique el acceso a las propiedades locales sin "esto" – sternr

+0

Ese es el camino a seguir si quiere ser pedante al respecto. +1 –

3

código de Visual Studio Puede usar StyleCop para generar una advertencia si no se anteponga con esto. Puede hacer que StyleCop se ejecute como parte del proceso de compilación siguiendo estos these instructions

StyleCop viene con un conjunto de reglas predeterminadas, muchas de ellas terribles, pero puede editar el archivo de reglas para que tenga más sentido para sus desarrolladores. También puede compartir el archivo StyleCop para que los cambios se repliquen inmediatamente a todos sus desarrolladores.

Es una solución bastante buena, gratis, provista por Microsoft y si se le ocurre un conjunto de reglas adecuado, sus desarrolladores crearán un código mucho más "ordenado". También puede crear reglas personalizadas en la línea de "Los métodos no deberían ser demasiado largos" donde defina la longitud. Un montón de cosas con las que jugar.

También supongo que podría establecer advertencias como errores, pero si se asegura de que su configuración de StyleCop sea exactamente como la quiere.

+0

¡Qué gran herramienta! He usado el FxCop, pero este es un buen complemento. –

Cuestiones relacionadas