c# 優化程式碼的一些規則——優先隱式類型[一]
- 2020 年 5 月 25 日
- 筆記
- 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 在不會在編譯器產生誤解的時候使用,一般在數據返回結果的時候使用,檢驗標準為能夠立馬知道數據的類型。