c# - 动态关键字影响返回类型
问题描述
我不确定为什么以下代码可以编译
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
引入就放弃了类型检查。这是预期的行为吗?
解决方案
这是预期的行为吗?
是的。几乎任何涉及动态值的操作都会以编译时类型结束dynamic
。请注意,绑定是动态执行的,因此即使在这种特定情况下您只有一个GetPerson
方法,但在更一般的方法调用情况下,重载可能出现在编译时不存在的执行时,具有不同的返回类型。
有一些操作不会以动态类型结束:
- 铸造(例如
(string) dynamicValue
) - 运算符(
is
例如dynamicValue is string
) - 操作员(
as
例如dynamicValue as string
- 构造函数调用(例如
new Foo(dynamicValue)
)
推荐阅读
- r - 如何将条形图和参数估计图组合为一个图形。ggplot2
- python - python3.6:socket.recv() 与 socket.recv_into() 性能对比
- powershell - Powershell 解析字符串内容的最佳方式
- sql - 选择中的左连接子查询
- python - ValueError:时间数据 '1980-02-10' 与格式 '%y%m%d' 不匹配(匹配)pandas
- python-3.x - 是否可以通过 conda 中的包描述进行搜索?
- azure-active-directory - 使用 Angular 8 中的 MSAL 库获取 Microsoft Azure AD 组名称列表
- python - python selenium:元素点击被拦截:元素在点不可点击
- vba - vba中的加法和乘法循环
- firebase-cloud-messaging - 将 Notification MessagingStyle 中的不同发件人与 FCM 推送通知分开