1.var, object, dynamic
var是C# 3中引入的,其实它仅仅只是一个语法糖。var本身并不是一种类型,其它两者object和dynamic是类型
var声明的变量在赋值的那一刻,就已经决定了它是什么类型
下面这样声明,就会有编译错误:
var a = 1;
a = "Test";
object之所以能够被赋值为任意类型的原因,其实都知道,因为所有的类型都派生自object. 所以它可以赋值为任何类型
同样的声明,下面就不会有编译错误:
object a = 1;
a = "Test";
dynamic它是C#引入的新类型,它的特点是申明为dynamic类型的变量,不是在编译时候确定实际类型的, 而是在运行时
下面这样声明,不会有编译错误,运行时会报错:
dynamic a = "test";
a++;
Console.WriteLine(a);
2.dynamic、ExpandoObject
在传递对象,但是又不想创建一个class或者struct的时候,ExpandoObject就是一个非常好的选择
using System; using System.Collections.Generic; using System.Dynamic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp2 { class Program { static void Main(string[] args) { List<ExpandoObject> edoList = new List<ExpandoObject>(); dynamic edoFirst = new ExpandoObject(); edoFirst.userName = "yyx"; edoFirst.userPwd = "123456"; edoList.Add(edoFirst); dynamic edoSecond = new ExpandoObject(); edoSecond.userName = "zy"; edoSecond.userPwd = "654321"; edoList.Add(edoSecond); foreach (dynamic edo in edoList) { Console.WriteLine(edo.userName+" "+ edo.userPwd); } Console.ReadLine(); } } }
ExpandoObject使用注意:
- ExpandObject不能用于太复杂的对象
- ExpandObject的使用范围必须要短
- ExpandObject的使用场合最好贴近程序的终端