5 votes

Comment puis-je dire à ReSharper d'arrêter de créer des champs en lecture seule ?

Este question est similaire, mais ma question semble être posée dans un commentaire sans réponse.

Je crée une classe C#. J'utilise alt - insert pour ajouter un constructeur. J'ajoute un argument au constructeur, et ensuite j'utilise alt - enter pour créer et initialiser un champ à partir de cet argument, comme suit :

alt text

Le problème est que mon champ est créé en tant que readonly et, dans de nombreux cas, je ne souhaite pas créer un champ en lecture seule.

readonly int my_int;

Comment puis-je dire à ReSharper de ne pas ajouter mon champ en lecture seule ? J'ai essayé de faire une recherche assez approfondie dans les options de ReSharper, mais apparemment il me manque quelque chose !

4voto

AakashM Points 32891

Moi aussi, je ne trouve aucune option permettant de modifier la création par défaut ; cependant si vous permettez à R# de créer ce champ comme il l'entend (c'est-à-dire readonly ), et plus tard, tapez ceci :

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

alors l'affectation à my_int sera souligné d'un trait rouge, car il est illégal, et la solution rapide proposée ( Alt + Enter ) à cet endroit sera Make field 'my_int' non-readonly .

Ainsi, dans l'esprit du "code d'abord", vous pouvez laisser R# faire son travail et l'utiliser pour le modifier lorsque vous en avez besoin (ce qui pourrait bien sûr s'avérer être jamais...).

2voto

citizenmatt Points 3031

La création du champ est codée en dur pour être en lecture seule à la création. L'idée est que vous créez un champ, de sorte qu'il n'a pas d'usages par défaut au plus restrictif, si vous essayez d'y écrire ailleurs, vous pouvez alt+enter à ce point et supprimer le statut readonly. Si le champ existe déjà, ReSharper va essayer d'initialiser le champ existant à partir du paramètre.

Si vous le souhaitez, vous pouvez écrire un plugin pour générer le champ en tant que non-lisible. Vous devriez consulter la page IntroduceFieldFix dans dotPeek. Elle a plusieurs constructeurs, qui lient la solution rapide aux squigglies d'avertissement, et elle introduira un champ utilisant le modèle par défaut pour la langue actuelle (qui est codé en dur en " private readonly $0 $1; ")

Vous pouvez créer une classe qui dérive également de InitializeFieldFix et comprend un constructeur qui prend UnusedParameterWarningBase comme paramètre. Vous pouvez alors suivre la même mise en œuvre que IntroduceFieldFix mais fournit un modèle différent pour la création du champ, en vérifiant d'abord la langue actuelle.

2voto

Shkredov S. Points 319

Une autre option peut être d'utiliser le refactoring "Introduce Field" à la place. La meilleure façon de l'appeler est d'utiliser "Refactor This" ( Ctrl + Shift + R ) sur une déclaration de paramètre et choisissez "Introduire un champ" parmi le nombre réduit d'options de refactoring. Par défaut, il génère un champ inscriptible, mais il existe également une option permettant de modifier les modificateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X