Динамический параметр заставляет компилятор думать, что метод возвращает динамический
Если у меня есть динамический параметр, компилятор, похоже, режет тип возврата и считает его динамическим.
Например:
public MethodResult IsValid(object userLogin)
{
return new MethodResult();
}
Вы думаете, что:
var isValidResult = IsValid(someObject());
Должен считаться как
dynamic -> MethodResult
Но он думает, что это:
dynamic -> dynamic
Добавляет ли динамический параметр в подпись полностью останавливает компилятор, зная, каково должно быть возвращение, несмотря на то, что возвращаемое значение строго типизировано?
Ответы
Ответ 1
Да, динамический останавливает компилятор от знания типа по любым параметрам, свойствам или типам возврата метода. Добавьте явное приведение как:
(MethodResult)IsValid(someObject));
Причина здесь в том, что как только вы входите в динамический мир на С#, вы входите в позднюю привязку. Компилятор не может проверить этот код, потому что он больше не может использовать какой-либо анализ статического типа. Таким образом, он откладывается на потом. Вы можете помочь преодолеть это, предоставив статические роли в качестве руководства для компилятора.