c# 优化代码的一些规则——优先隐式类型[一]
前言
说到底就是优先使用var,这个关键字,在c# 3.0中出现了。
首先要确认几点,一个就是var 是静态变量,而不是动态变量,也就是说使用var 你是不必去担心性能问题得,
百度百科:
1)静态存储变量通常是在变量定义时就分定存储单元并一直保持不变,直至整个程序结束。静态变量,全局动态变量都是静态存储
2)动态存储变量是在程序执行过程中,使用它时才分配存储单元,使用完毕立即释放
3)静态存储变量是一直存在的,而动态存储变量则时而存在时而消失。通常把由于变量存储方式不同而产生的特性称为变量的生存期
4)静态存储只会初始化一次
好的,既然其不会影响性能问题,也就是说我们写代码根据规范,那么问题不大。
正文
首先说明var 为什么出现,也就是其中的好处:
1.为了支持匿名类型机制。
2.解放我们的双手,让我们在轻易可以推断类型的情况下,可以用var 去代替,同样可以避免我们走入一些误区。如IQueryable
那么使用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 在不会在编译器产生误解的时候使用,一般在数据返回结果的时候使用,检验标准为能够立马知道数据的类型。