Это заставило меня смутить, поэтому я подумал, что попрошу здесь в надежде, что гуру С# может объяснить это мне.
Почему этот код генерирует ошибку?
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<T>
и Func<IEnumerable<T>>
.
Может кто-то пролить свет на это?