Если C # ожидает делегата с типом возврата int
, делегат, объявленный для возврата dynamic
, несовместим. Ваш делегат объявлен как Func<dynamic, dynamic>
, а C # строго типизирован. Это не волнует, если ваша функция на самом деле возвращает int и принимает строку; это все еще объявлено как Func<dynamic, dynamic>
.
Причина, по которой код не компилируется, очевидна, если рассмотреть этот пример:
Func<string, int> myFunc = delegate(string foo) { return 42; };
int result = myFunc("Foo");
// If this was allowed...
Func<dynamic, dynamic> otherFunc = delegate(string foo) { return 42; };
myFunc = otherFunc;
result = myFunc("Foo");
// Then this would also be allowed but would be a run-time error.
otherFunc = delegate(string foo) { return "Bar"; }; // Valid
myFunc = otherFunc;
result = myFunc("Foo"); // Oops... an int isn't returned.