dotnet/roslyn

IDE0059 incorrectly reported when a scoped variable is introduced.

Open

#41,905 opened on Feb 24, 2020

View on GitHub
 (5 comments) (0 reactions) (0 assignees)C# (4,257 forks)batch import
Area-IDEBugFeature - IDE0059help wanted

Repository metrics

Stars
 (20,414 stars)
PR merge metrics
 (Avg merge 6d 17h) (256 merged PRs in 30d)

Description

Version Used: 16.4.5

The following program triggers the bug. The code attempt += 1; is reported as unneeded which is incorrect.

using System;

class X
{
    public X() { }
    public X( int value ) => Value = value;
    public int Value { get; set; }
}

class Program
{
    static object Execute( X x ) => throw new NotImplementedException();


    static object Run()
    {
        var attempt = 1;

        while ( true )
        {
            try
            {
                var result = Execute( new X
                {
                    Value = 1
                } );

                return result;
            }
            catch when ( attempt <= 5 ) { }

            attempt += 1;
        }
    }
}

A few minor changes to the program eliminate the issue:

  1. Do not use property initializers for new X() - Execute( new X( 1 ) )
  2. Do not introduce the local result and instead just return Execute...

Contributor guide