Подтвердить что ты не робот

Динамический параметр заставляет компилятор думать, что метод возвращает динамический

Если у меня есть динамический параметр, компилятор, похоже, режет тип возврата и считает его динамическим.

Например:

public MethodResult IsValid(object userLogin)
{     
  return new MethodResult();
}

Вы думаете, что:

var isValidResult = IsValid(someObject());

Должен считаться как

dynamic -> MethodResult 

Но он думает, что это:

dynamic -> dynamic

Добавляет ли динамический параметр в подпись полностью останавливает компилятор, зная, каково должно быть возвращение, несмотря на то, что возвращаемое значение строго типизировано?

4b9b3361

Ответ 1

Да, динамический останавливает компилятор от знания типа по любым параметрам, свойствам или типам возврата метода. Добавьте явное приведение как:

(MethodResult)IsValid(someObject));

Причина здесь в том, что как только вы входите в динамический мир на С#, вы входите в позднюю привязку. Компилятор не может проверить этот код, потому что он больше не может использовать какой-либо анализ статического типа. Таким образом, он откладывается на потом. Вы можете помочь преодолеть это, предоставив статические роли в качестве руководства для компилятора.