var和dynamic类型表面上相似,但实际上是非常不同的:
1.var说:“让编译器去确定我的类型吧”
2.dynamic说:“让运行时去确定我的类型吧”
例如:
dynamic x = "hello"; // 静态类型是dynamic,运行时类型是string
var y = "hello"; // 静态类型是string,运行时类型是string
int i = x; // 运行时错误(无法将string转换为int)
int j = y; // 编译时错误(无法将string转换为int)
一个由var声明的变量的静态类型可以是dynamic:
dynamic x = "hello";
var y = x; // y的静态类型是dynamic
int z = y; // 运行时错误(无法将string转换为int)
示例:
using System;
namespace VarAndDynamic
{
class Program
{
static void Main(string[] args)
{
dynamic x = "hello";
var y = "hello";
Console.WriteLine($"x的运行时类型为:{x.GetType()}");
Console.WriteLine($"y的运行时类型为:{y.GetType()}");
try
{
int i = x;
}
catch (Exception e)
{
Console.WriteLine($"int i = x,\t{e.Message}");
};
}
}
}
运行结果: