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 在不會在編譯器產生誤解的時候使用,一般在數據返回結果的時候使用,檢驗標準為能夠立馬知道數據的類型。