Есть ли концептуальная причина, почему вызов метода с динамическим параметром всегда возвращает динамический? - PullRequest
0 голосов
/ 24 марта 2019

Я могу себе представить, что это будет проблемой с несколькими перегрузками, но (кроме Linq) большая часть кода, вероятно, имеет только одну перегрузку.

Когда имеется только одна перегрузка, она может сохранить дополнительный шаблон для литья, избегая таких ошибок, как Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type. в ситуациях.

Конечно, вы можете утверждать, что, когда вы добавите перегрузку на более позднем этапе, код будет т.е. снова запускать вышеуказанную ошибку компилятора. Но опять же - добавление перегрузок может также нарушить типизированное поведение (то есть с несколькими интерфейсами).

Это просто не приоритет (пока) или я упускаю какую-то концептуальную проблему? Я прошу это, чтобы узнать больше о дизайне языка.

static int MapLolCats(int amountOfLolcats, Func<dynamic,int> mappingFunction)
{
    return mappingFunction(amountOfLolcats);
}

// This works as expected
var amountOfLegs = MapLolCats(5, x => x * 4);

// This creates a compilation error (despite you could deduct what is meant, because there is only one overload)
// Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type
dynamic jsonValue = 5;
var amountOfLegs = MapLolCats(jsonValue, x => x * 4);
...