В моем приложении есть код, подобный следующему:
class Program
{
static void Main(string[] args)
{
Method(uri => Task.FromResult(uri));
}
static void Method(Func<Uri, Uri> transformer)
{
throw new NotImplementedException();
}
static void Method(Func<Uri, Task<Uri>> transformer)
{
throw new NotImplementedException();
}
}
Как и ожидалось, запуск этого кода вызывает вторую перегрузку Method, ожидающую делегата функции, возвращающего задачу. Однако, если я изменю код, чтобы избежать использования анонимного метода в Main:
class Program
{
static void Main(string[] args)
{
Method(Method2);
}
static Task<Uri> Method2(Uri uri)
{
return Task.FromResult(uri);
}
static void Method(Func<Uri, Uri> transformer)
{
throw new NotImplementedException();
}
static void Method(Func<Uri, Task<Uri>> transformer)
{
throw new NotImplementedException();
}
}
Компилятор C # теперь жалуется на то, что мой вызов метода "Method" неоднозначен. Что мне не хватает?
Method2
) в делегата (Func<Uri, Task<Uri>>
) - person dcastro   schedule 27.08.2015TResult
вFunc<in T, out TResult>
ковариантен. - person haim770   schedule 27.08.2015Method((Func<Uri, Task<Uri>>) Method2);
- person M.kazem Akhgary   schedule 27.08.2015Func<Uri, Uri>
вMethod2
. - person haim770   schedule 27.08.2015Task<Uri>
. кажется, что компилятор даже не обращает на это внимания, чтобы разрешить эту двусмысленность. или, может быть, Task ‹Uri› сам возвращает Uri? - person M.kazem Akhgary   schedule 27.08.2015