一個人的成功有時往往體現在細節上,而習慣往往是這些細節的具體表現形式,這裡我也想總結幾個不太好的編程習慣。
第一:int初始化的控制,對數據初始值的理解問題。下面的一段程序大概的意思就是,頁面上有一個屬性HighPrice,它最終會通過ViewState保存在頁面中,如果ViewState為空,則設置屬性HighPrice的值為-1,否則直接讀取ViewState中的值。但實際情況並不是這樣,程序在初始化時,HighPrice的初始值為0,所以下面的代碼永遠得不到-1。
public int HighPrice {
get
{
if (ViewState["HighPrice"] != null)
return (int)ViewState["HighPrice"];
else
return -1;
}
set
{
ViewState["HighPrice"] = value;
}
}
解決方案:下面給出相對正確的寫法。大家如果有更好的寫法可以提出參考下。
private int _HighPrice = -1;
public int HighPrice
{
get
{
if (null != ViewState["HighPrice"])
{
int.TryParse(ViewState["HighPrice"].ToString(), out _HighPrice);
}
return this._HighPrice;
}
set
{
this._HighPrice = value;
if (null == ViewState["HighPrice"])
{
this._HighPrice = -1;
}
//把變量值保存到ViewState中
ViewState["HighPrice"] = this._HighPrice;
}
}
第二:對於多條件的判斷,最典型的要數&&操作符了。如果一個語句的執行需要同時滿足兩個條件,我們經常會這樣寫:if(條件一&&條件二),意圖是認為條件一和條件二都等於true的情況下,但實際情況是如果兩人條件都是false,那麼最後的條件一&&條件二的結果剛好也是true,此時就會出現不可預測的錯誤。而且這種錯誤也是非常難查找的。有時候寫代碼能省就省,不能省的一個也不能少。
說明:此條對C#不成立,但其它的語言就不一定,大家可以測試下。
第三:對於if語句的寫法。我們大多會這樣寫:if(條件==true),正常情況下是沒有問題,但有時會寫成if(條件=true),也就是程序員在寫的時候少寫了一個等號,造成程序永遠執行下面的代碼,這種錯誤查找起來也是相當困難的,因為編譯器在編譯時並不會報錯。
解決方案:
1:可以這樣寫if(true==條件),如果你寫成了if(true=條件),編譯器會報錯,因為true是不能充當左值的。
2:如果只有一個條件,就直接if(條件),把==true給省略即可,如果是多條件就按方法一來執行。
說明:if(true=條件)這種程序當然並不是程序員想這要寫,只是有時會少寫一個而已。