динамическое ключевое слово влияет на тип возвращаемого значения - PullRequest
1 голос
/ 21 марта 2019

Я не уверен, почему следующий код компилируется

namespace ConsoleApp13
{
    public class Person
    {

    }
    class Program
    {
        static void Main(string[] args)
        {
            dynamic expand = new ExpandoObject();
            List<Person> people = GetPerson(expand);

        }

        public static Person GetPerson(int item)
        {
            return new Person();
        }

    }
}

Почему ключевое слово dynamic влияет на тип возвращаемого значения.Это похоже на то, как компилятор отказывается от проверки типов, как только вводится dynamic.Это ожидаемое поведение?

1 Ответ

3 голосов
/ 21 марта 2019

Это ожидаемое поведение?

Да. Почти все, что вы делаете , включая динамическое значение, заканчивается типом времени компиляции dynamic. Обратите внимание, что привязка выполняется динамически, поэтому, хотя в этом конкретном случае у вас есть только один GetPerson метод, в более общем случае вызова метода перегрузки могут присутствовать во время выполнения, которое не ' t присутствует во время компиляции с разными типами возврата.

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

  • Кастинг (например, (string) dynamicValue)
  • Оператор is (например, dynamicValue is string)
  • Оператор as (например, dynamicValue as string
  • вызовы конструктора (например, new Foo(dynamicValue))
...