我不确定下面的代码为什么会编译
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
之后就放弃了类型检查。这是预期的行为吗?
答案 0 :(得分:3)
这是预期的行为吗?
是的。您所做的几乎所有涉及动态值的 都以dynamic
的编译时类型结束。请注意,绑定是动态执行的,因此即使在这种特定情况下,您只有一个GetPerson
方法,在更常见的方法调用情况下,执行时也会出现重载在编译时不存在,具有不同的返回类型。
有些操作不以动态类型结尾:
(string) dynamicValue
)is
运算符(例如dynamicValue is string
)as
运算符(例如dynamicValue as string
new Foo(dynamicValue)
)