Search code examples
c#inotifypropertychangedsuppress-warningsreactiveuicallermembername

Suppress "Member is never assigned to" warning in C#


I have the following code:

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

using ReactiveUI INPC support. The compiler is always warning me that Trochoid is never assigned to and will always be null. However due to the magic that RaiseAndSetIfChanged performs through CallerMemberName support, the code does work and the compiler is wrong.

How do I cleanly suppress these warnings in my code?


Solution

  • How to cleanly suppress these warnings in my code

    An alternative to an inappropriate assignment would be to just a #pragma:

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

    That should work, and it keeps the ugliness at exactly the place that it makes sense to document it - at the field declaration.

    If you have multiple fields handled in the same way, you could put them all in the same "block" of disabled warnings, with a comment applicable to all of them.

    Whether you view this as "clean" or not is a matter of taste, of course. I think I prefer it to assignments which are only there for the side-effect of removing the warnings.