dotnet/roslyn

IDE0059 incorrectly reported when a scoped variable is introduced.

Aperta

#41.905 aperta il 24 feb 2020

 (5 commenti) (0 reazioni) (0 assegnatari)C# (4257 fork)batch import
Area-IDEBugFeature - IDE0059help wanted

Metriche repository

Star
 (20.414 stelle)
Metriche merge PR
 (Merge medio 6g 17h) (256 PR mergiate in 30 g)

Descrizione

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...

Guida contributor