Search code examples
c#.netdisposeresource-cleanup

Why cast null into variables in cleanup code?


When viewing code from certain libraries in C# (using decompiling by Resharper), I sometimes come across cleanup code that looks like this:

public class Something
{
    private SomeObject _someObject;

    ...

    public void Dispose()
    {
        _someObject = (SomeObject) null;
    }
}

What is the benefit of casting null to the type of the field that is being cleared here?


Solution

  • A decompiler cannot distinguish between assigning null without a cast and with a cast, since they do the same thing and compile to the same IL. Since null sometimes does need to be cast, e.g. when calling an overloaded method, some decompilers may always include the cast for simplicity.

    There is no benefit here and I strongly suspect the original code did not include the cast.