Почему Func неоднозначен с Func >?

Это меня сбило с толку, поэтому я подумал, что спрошу здесь в надежде, что гуру C # сможет мне это объяснить.

Почему это код генерирует ошибку?

class Program
{
    static void Main(string[] args)
    {
        Foo(X); // the error is on this line
    }

    static String X() { return "Test"; }

    static void Foo(Func<IEnumerable<String>> x) { }
    static void Foo(Func<String> x) { }
}

Рассматриваемая ошибка:

Error
    1
    The call is ambiguous between the following methods or properties:
'ConsoleApplication1.Program.Foo(System.Func<System.Collections.Generic.IEnumerable<string>>)' and 'ConsoleApplication1.Program.Foo(System.Func<string>)'
    C:\Users\mabster\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs
    12
    13
    ConsoleApplication1

Не имеет значения, какой тип я использую - если вы замените объявления "String" на "int" в этом коде, вы получите такую ​​же ошибку . Как будто компилятор не может отличить Func от Func > .

Может кто-нибудь пролить свет на это?

20
задан J-16 SDiZ 1 January 2011 в 02:39
поделиться