Рассмотрим следующую примерную программу:
using System;
public delegate string MyDelegateType(int integer);
partial class Program
{
static string MyMethod(int integer) { return integer.ToString(); }
static void Main()
{
Func<int, string> func = MyMethod;
// Scenario 1: works
var newDelegate1 = new MyDelegateType(func);
newDelegate1(47);
// Scenario 2: doesn’t work
dynamic dyn = func;
var newDelegate2 = new MyDelegateType(dyn);
newDelegate2(47);
}
}
Первый работает как ожидалось - конверсия в MyDelegateType
завершается успешно. Второй, однако, выдает сообщение RuntimeBinderException
с сообщением об ошибке:
Невозможно неявно преобразовать тип 'System.Func < int, string > ' to 'MyDelegateType'
Есть ли что-либо в спецификации С#, которая допускает это поведение, или это ошибка в компиляторе Microsoft С#?