14 votes

Suppression de l'avertissement "Un membre n'est jamais affecté à" en C#

J'ai le code suivant :

ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
    get { return _Trochoid; }
    set { this.RaiseAndSetIfChanged(value); }
}

en utilisant le support INPC de ReactiveUI. Le compilateur m'avertit toujours que Trochoid n'est jamais affecté et sera toujours nul. Cependant, en raison de la magie de la RaiseAndSetIfChanged réalise par CallerMemberName support, le code fonctionne et le compilateur se trompe.

Comment puis-je proprement supprimer ces avertissements dans mon code ?

15voto

Jon Skeet Points 692016

Comment proprement supprimer ces avertissements dans mon code

Une alternative à une assignation inappropriée serait de juste un #pragma :

#pragma warning disable 0649 // Assigned by reflection
ViewPortViewModel _Trochoid;
#pragma warning restore 0649

Cela devrait fonctionner, et cela permet de conserver la laideur à l'endroit exact où il est logique de la documenter, c'est-à-dire lors de la déclaration sur le terrain.

Si plusieurs champs sont traités de la même manière, vous pouvez les placer dans le même "bloc" d'avertissements désactivés, avec un commentaire applicable à tous.

Que vous considériez cela comme "propre" ou non est une question de goût, bien sûr. Je pense que je préfère cela aux affectations qui ne sont là que pour le plaisir d'être là. effet secondaire de supprimer les avertissements.

7voto

Paul Betts Points 41354

Maintenant que chaque plateforme a CallerMemberNameAttribute dans ReactiveUI, il n'est pas nécessaire de subir l'oppression de votre compilateur obsessionnel compulsif :

ViewPortViewModel _Trochoid;
public ViewPortViewModel Trochoid
{
    get { return _Trochoid; }
    set { this.RaiseAndSetIfChanged(ref _Trochoid, value); }
}

Les autres surcharges sont vraiment inutiles maintenant, mais je les laisse parce que leur suppression est une modification de rupture et ne sera donc pas effectuée avant ReactiveUI 5.0.

4voto

Grant Thomas Points 28280

Vous pourriez l'attribuer par défaut à un type de référence :

ViewPortViewModel _Trochoid = null;

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