为什么这里的类型是System.Object
本文关键字:System Object 类型 这里 为什么 | 更新日期: 2023-09-27 18:21:00
下面是一些代码:
Func<dynamic> f1 = new Func<dynamic>(() => 10);
Func<int> f2 = () => 10;
Console.Write(f1.Method.ReturnType);
Console.Write(" and " + f2.Method.ReturnType );
输出:System.Object and System.Int32
我的问题是:
为什么DLR推断的dynamic
类型(用于dynamic
的类型)在这里是System.Object
而不是System.Int32
?这不是很合乎逻辑,因为它还涉及Int32结构到对象的装箱。
据我所知,当我们在这里检查类型时,我们会在执行时动态执行,因为我们使用反射。所以DLR当时已经知道它是int
,但出于某种原因,它将其封装到Object
中。。。为什么?
我试着在SO上找到关于这件事的任何信息,并在谷歌上搜索,但我找不到任何解释这一切的答案。
此处未推断任何内容。它只是在执行之前不知道类型,这就是为什么给定的类型是object
。(静态)编译器不知道类型,因为您还不知道它。它作为object
被传递,并且在主叫侧它再次是dynamic
。
这与常规方法相同:
Console.Write(typeof(Program).GetMethod("F1").ReturnType);
public static dynamic F1()
{
return 10;
}
输出:
系统对象