动态关键字会影响返回类型

时间:2019-03-21 13:45:43

标签: c# .net dynamic .net-core

我不确定下面的代码为什么会编译

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 个答案:

答案 0 :(得分:3)

  

这是预期的行为吗?

是的。您所做的几乎所有涉及动态值的 都以dynamic的编译时类型结束。请注意,绑定是动态执行的,因此即使在这种特定情况下,您只有一个GetPerson方法,在更常见的方法调用情况下,执行时也会出现重载在编译时不存在,具有不同的返回类型。

有些操作以动态类型结尾:

  • 铸造(例如(string) dynamicValue
  • is运算符(例如dynamicValue is string
  • as运算符(例如dynamicValue as string
  • 构造函数调用(例如new Foo(dynamicValue)