c# 优化代码的一些规则——优先隐式类型[一]

前言

说到底就是优先使用var,这个关键字,在c# 3.0中出现了。

首先要确认几点,一个就是var 是静态变量,而不是动态变量,也就是说使用var 你是不必去担心性能问题得,

百度百科:

1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储

2)动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放

3)静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。通常把由于变量存储方式不同而产生的特性称为变量的生存期

4)静态存储只会初始化一次

好的,既然其不会影响性能问题,也就是说我们写代码根据规范,那么问题不大。

正文

首先说明var 为什么出现,也就是其中的好处:

1.为了支持匿名类型机制。

2.解放我们的双手,让我们在轻易可以推断类型的情况下,可以用var 去代替,同样可以避免我们走入一些误区。如IQueryable和IEnumberable的区别。

那么使用var 该注意什么?

使用var,对我们的命名要求更高了。

 var some=createsomething();
 var i=Factor.create(args);

这样写,可能会被打死。

使用var 的时候,对命名的要求更加高了。

如:

 var account=createaccount();
 var boyList=Factor.create(args);

那么这时候我们就知道了变量account 是一个account 实例,boyList是一个list类型。

那么那些领域最好var 不要去使用呢?

1.一切的初始化,最好不要去用var。

var 会帮助我们推断初始化变量,比如我们使用var 去这样:

var student=new Student();

这就是一个坑,因为我们会参数歧义,var 可能是Istudent,或者其父类,会影响我们编程体验。

2.一切的计算,最好不要去使用var。

var d=1.1;
var total=d*100;

这时候total是double 类型的,那么问题关键是你想要total是double类型吗?可能是想要的是一个int。

而还可能出现这种情况:

var d=getresule(args);
var total=d*100;

args 代表参数,假如getresule 会根据参数的不同返回,int 或者 float。

那么很有可能在作者写code的时候,会忽略total的类型。

那么在什么情况下,最好使用var呢?linq情况下,最好使用var。

var q=from s in db.student
      select s.name
var q2=q.where(s=>s.name=="张三");

IEnumberable<student> q=from s in db.student
      select s.name
var q2=q.where(s=>s.name=="张三");

这两者区别非常大,第二个首先会查出所有的name,然后过滤张三。第一个则只是去数据库里查询张三。

总结

var 在不会在编译器产生误解的时候使用,一般在数据返回结果的时候使用,检验标准为能够立马知道数据的类型。