2010-08-25 13 views
5

Questo question è simile, ma la mia domanda sembra essere richiesta in un commento senza risposta.Come posso dire a ReSharper di interrompere la creazione di campi di sola lettura?

Creo una classe C#. Io uso alt - inserisci per aggiungere un costruttore. Aggiungo un argomento al costruttore, e poi io uso alt - immettere per creare e inizializzare un campo da questo argomento, in questo modo:

alt text

Il problema è che il mio campo viene creato come un campo readonly e in molti casi non desidero creare un campo di sola lettura.

readonly int my_int; 

Come posso dire a ReSharper di non aggiungere rendere il mio campo in sola lettura? Ho provato a fare una ricerca abbastanza approfondita nelle opzioni di ReSharper, ma a quanto pare mi manca qualcosa!

+0

Perché non si desidera denominare i campi di sola lettura? – DixonD

+2

Perché in definitiva questo campo non è destinato alla sola lettura. In alcuni casi, certo, voglio readonly. Ma a questo punto ho appena introdotto il campo e preferirei che non sia stato creato come readonly. –

+1

Sono d'accordo, lo odio nel resharper! Questo auto-readonly solo inquina il mio codice per la maggior parte del tempo. – andrecarlucci

risposta

4

Anche io non riesco a trovare alcuna opzione per modificare l'impostazione predefinita di creazione; tuttavia, se si consente R # per creare questo campo come si ama (cioè readonly), e successivamente digitare questo:

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

poi il compito di my_int otterrà una rossa ondulata sottolineano, dal momento che è illegale, e la soluzione rapida offerta (Alt + Immettere) in quella posizione sarà Make field 'my_int' non-readonly.

Quindi, nello spirito del "codice prima", potresti semplicemente lasciare che R # faccia il suo lavoro, e usarlo anche per cambiarlo come e quando ne hai effettivamente bisogno (che potrebbe ovviamente rivelarsi essere mai ...)

2

La creazione del campo è hardcoded per essere di sola lettura durante la creazione. L'idea è che tu stia creando un campo, quindi non ha alcun utilizzo da predefinito al più restrittivo, se provi a scriverlo altrove, puoi + alt entrare in quel punto e rimuovere lo stato di sola lettura. Se il campo esiste già, ReSharper tenterà di inizializzare il campo esistente dal parametro.

Se si desidera, è possibile scrivere un plug-in per generare il campo come non di sola lettura. Dovresti esaminare la classe IntroduceFieldFix in dotPeek. Ha diversi costruttori, che vincola la soluzione rapida agli squigglie di avviso, e introdurrà un campo usando il modello predefinito per la lingua corrente (che è codificato su "private readonly $0 $1;")

È possibile creare una classe che derivi anche da InitializeFieldFix e include un costruttore che prende come parametro UnusedParameterWarningBase. È quindi possibile seguire la stessa implementazione di IntroduceFieldFix, ma fornire un modello diverso per la creazione del campo, verificando prima la lingua corrente.

+0

era quello che ho anche concluso. scrivere un addin non era un percorso che volevo andare giù – Simon

+0

ci dovrebbe davvero essere un'opzione per disattivarlo – Simon

2

Un'altra opzione potrebbe essere quella di utilizzare il refactoring "Introduci campo". Il modo migliore per chiamarlo è utilizzare "Refactor This" (Ctrl + Shift + R) su una dichiarazione di parametro e scegliere "Introduci campo" dal numero ridotto di opzioni di refactoring. Di default genera un campo scrivibile, ma esiste anche un'opzione per modificare i modificatori.

+0

Questo funziona esattamente come voglio. –

Problemi correlati