Динамический параметр заставляет компилятор думать, что возвращаемый метод является динамическим - PullRequest
31 голосов
/ 20 октября 2011

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

Например:

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

Вы могли бы подумать, что:

var isValidResult = IsValid(someObject());

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

dynamic -> MethodResult 

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

dynamic -> dynamic

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

1 Ответ

27 голосов
/ 20 октября 2011

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

(MethodResult)IsValid(someObject));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...