2010-08-25 11 views
5

Este question es similar, pero parece que mi pregunta se formula en un comentario sin respuesta.¿Cómo puedo decirle a ReSharper que deje de crear campos de solo lectura?

Creo una clase C#. Yo uso alt - inserte para agregar un constructor. Añado un argumento para el constructor, y luego utilizo alt - entrar para crear e inicializar un campo de esa vista, así:

alt text

El problema es que mi campo se crea como un campo readonly, y en muchos casos no quiero crear un campo de solo lectura.

readonly int my_int; 

¿Cómo le puedo decir a ReSharper que no agregue hacer que mi campo sea de solo lectura? Intenté hacer una búsqueda bastante exhaustiva en las opciones de ReSharper, ¡pero aparentemente me falta algo!

+0

¿Por qué no quieres nombrar los campos de forma leída? – DixonD

+2

Porque, en última instancia, este campo no pretende ser de solo lectura. En algunos casos, claro, quiero leerlo solo. Pero en este punto, acabo de presentar el campo y preferiría que no se cree como solo de lectura. –

+1

Estoy de acuerdo, ¡odio eso en resharper! Este solo de forma automática solo contamina mi código la mayor parte del tiempo. – andrecarlucci

Respuesta

4

Yo tampoco puedo encontrar ninguna opción para cambiar el valor predeterminado de creación; embargo, si se permite que R # para crear este campo, ya que le gusta (es decir readonly), y luego escriba lo siguiente:

public void Bar(int baz) 
{ 
    my_int = baz; 
} 

entonces la asignación a my_int obtendrá una serpenteante roja subrayado, ya que es ilegal, y la solución rápida ofrecida (Alt + Introduzca) en esa ubicación será Make field 'my_int' non-readonly.

Por lo tanto, en el espíritu del 'código primero', es posible que desee dejar que R # haga lo suyo, y también usarlo para cambiarlo cuando lo necesite cambiado (lo que podría ser, por supuesto, nunca ...)

2

La creación del campo está codificada para que sea de solo lectura en la creación. La idea es que esté creando un campo, por lo que no tiene ningún uso predeterminado al más restrictivo, si intenta escribir en otro lugar, puede alt + enter en ese punto y eliminar el estado de solo lectura. Si el campo ya existe, ReSharper intentará inicializar el campo existente del parámetro.

Si lo desea, puede escribir un complemento para generar el campo como no de solo lectura. Deberías mirar la clase IntroduceFieldFix en dotPeek. Tiene varios constructores, que une la solución rápida a los squigglies de advertencia, e introducirá un campo usando el patrón predeterminado para el idioma actual (que está codificado como "private readonly $0 $1;")

Puede crear una clase que también derive desde InitializeFieldFix, e incluye un constructor que toma UnusedParameterWarningBase como parámetro. A continuación, puede seguir la misma implementación que IntroduceFieldFix, pero proporcione un patrón diferente para la creación del campo, verificando primero el idioma actual.

+0

eso fue lo que también concluí. escribir un complemento no era una ruta que quería bajar – Simon

+0

realmente debería haber una opción para desactivar esto – Simon

2

Otra opción puede ser usar la refactorización 'Introducir campo' en su lugar. La mejor manera de llamarlo es utilizar 'Refactor Este' (Ctrl +Shift +R) en una declaración de parámetros y elegir 'Introducir Campo' de la reducción del número de opciones de refactorización. Por defecto, generará un campo escribible, pero también hay una opción para cambiar los modificadores.

+0

Esto funciona exactamente como yo quiero. –

Cuestiones relacionadas