dotnet/roslyn

Confusing error message for overloaded generic delegate-accepting method

Open

#8.603 geöffnet am 11. Feb. 2016

Auf GitHub ansehen
 (1 Kommentar) (1 Reaktion) (1 zugewiesene Person)C# (4.257 Forks)batch import
Area-CompilersBugConcept-Diagnostic Clarityhelp wanted

Repository-Metriken

Stars
 (20.414 Stars)
PR-Merge-Metriken
 (Durchschn. Merge 6T 17h) (256 gemergte PRs in 30 T)

Beschreibung

I have the following code:

using System;

class Program
{
    static void Main()
    {
        M(x => { });
    }

    static void M(string s)
    {
    }

    static void M<T>(Action<T> a)
    {
    }
}

It produces the following error:

CS1660 Cannot convert lambda expression to type 'string' because it is not a delegate type

I think that a human can clearly see that the code is attempting to call the delegate-accepting overload, but is missing a type argument (M<int>(x => { });) or explicit parameter type (M((int x) => { });).

But the compiler shows error message that's related to the first (string-accepting) overload, which I think is confusing.

Contributor Guide