有些时候使用隐式类型可以减少代码长度,通过不影响代码可读性,反而使我们把注意力放在了更有用的代码上;但是,有时候隐式类型会是代码可读性变差。所以要自己衡量什么时候使用隐式类型的变量。下面看一个简单的例子
static void Main(string[] args) { //简化了代码,没有牺牲可读性 var wordCount = new Dictionary<string, int>(); foreach (var dict in wordCount) { Console.WriteLine("number of {0} is {1}", dict.Key, dict.Value); } //可读性变差,不容易从代码中直接看出变量类型 var numA = 2147483647; var numB = 2147483648; var numC = 4294967295; Console.WriteLine(numA.GetType()); Console.WriteLine(numB.GetType()); Console.WriteLine(numC.GetType()); Console.Read(); }
隐式类型的局部变量对象和集合初始化程序在C# 3.0中,我们有了新的对象和集合初始化的方法。
对象初始化程序(object initializers)当我们有了对象初始化程序的时候,对象初始化的代码就变得更加直观、简单。看一个例子:
public class Book { public int Id { get; set; } public string Title { get; set; } //如果没有默认的构造函数,使用对象初始化时就会报错 public Book() { } public Book(string title) { this.Title = title; } } class Program { static void Main(string[] args) { //C# 3.0之前初始化对象的方法 Book b1 = new Book(); b1.Id = 1; b1.Title = "C# step by step"; //使用对象初始化程序 Book b2 = new Book(){Id = 2, Title = "C# in depth"}; Book b3 = new Book { Id = 3, Title = "C# in depth" }; Book b4 = new Book("C# in depth") { Id = 1}; } }
当我们查看IL代码会发现,b1、b2和b3的IL代码完全一样。