首页 > 解决方案 > 动态关键字影响返回类型

问题描述

我不确定为什么以下代码可以编译

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引入就放弃了类型检查。这是预期的行为吗?

标签: c#.netdynamic.net-core

解决方案


这是预期的行为吗?

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

有一些操作不会以动态类型结束:

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

推荐阅读