2010-08-03 45 views
7

我如何優化此代碼?我不喜歡有案例說明,有沒有辦法改進這段代碼?我如何使此代碼更加優化

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower(); 

    switch (selVal) 
    { 
     case "date": 
      pnlDate.Visible = true; 
      pnlSubject.Visible = false; 
      pnlofficer.Visible = false; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = false;      
      break; 

     case "subject": 
      pnlDate.Visible = false; 
      pnlSubject.Visible = true; 
      pnlofficer.Visible = false; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = false; 
      break; 

     case "officer": 
      pnlDate.Visible = false; 
      pnlSubject.Visible = false; 
      pnlofficer.Visible = true; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = false; 
      break; 

     case "status": 
      pnlDate.Visible = false; 
      pnlSubject.Visible = false; 
      pnlofficer.Visible = false; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = true; 
      break; 

     default: 
      pnlDate.Visible = false; 
      pnlSubject.Visible = false; 
      pnlofficer.Visible = false; 
      pnlCIA.Visible = false; 
      pnlMedia.Visible = false; 
      pnlStatus.Visible = false; 
      break; 
    } 
} 

回答

33

夠簡單。根據情況選擇你永遠只能做一個項目可見的,所以剛纔設置的知名度如下:

pnlDate.Visible = (selVal == "date"); 
pnlSubject.Visible = (selVal == "subject"); 
pnlofficer.Visible = (selVal == "officer"); 
pnlCIA.Visible = false; 
pnlMedia.Visible = false; 
pnlStatus.Visible = (selVal == "status");  

這比一切都設置爲visible = false;,然後只顯示,因爲這包含了它你需要的項目更好全部只用於實際可見性設置的6行代碼。

+3

我可能會添加parantheses,使其更具可讀性。 – 2010-08-03 14:05:59

+0

+1:簡單明瞭 – RedFilter 2010-08-03 14:07:33

+0

@ray dey - 仙女no。完成。 – GenericTypeTea 2010-08-03 14:11:53

5
protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) 
      { 
       string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower(); 
         pnlDate.Visible = false; 
         pnlSubject.Visible = false; 
         pnlofficer.Visible = false; 
         pnlCIA.Visible = false; 
         pnlMedia.Visible = false; 
         pnlStatus.Visible = false; 
       switch (selVal) 
       { 
        case "date": 
         pnlDate.Visible = true;      
         break; 

        case "subject": 
         pnlSubject.Visible = true; 
         break; 

        case "officer": 
         pnlofficer.Visible = true; 
         break; 
        case "status": 
         pnlStatus.Visible = true; 
         break; 
       } 

      } 
10

另一種方式:

// set everything to false 
Dictionary<string, type> d = new Dictionary<string, type>() 
{ 
    {"date", pnlDate}, 
    {"subject", plnSubject}, 
    {"officer", plnOfficer}, 
    {"status", plnStatus} 
}; 

d[selVal].Visible = true; 
+0

+1。非常好.. – Steven 2010-08-03 14:15:45

+0

+1好想法... – 2010-08-03 14:26:04

+1

什麼是downvote?我知道這些代碼與原來的代碼並不完全相同,這只是爲了展示這個想法。 – NullUserException 2010-08-03 14:27:41

3

你可以這樣做:

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) { 
    string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower(); 

    pnlDate.Visible = (selVal == "date"); 
    pnlSubject.Visible = (selVal == "subject"); 
    pnlofficer.Visible = (selVal == "officer"); 
    pnlCIA.Visible = (selVal == "cia"); 
    pnlMedia.Visible = (selVal == "media"); 
    pnlStatus.Visible = (selVal == "status"); 
} 

或者這一個,而少讀,會更準確:

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) { 
    string selVal = ddlFilterResultBy.SelectedValue.ToString(); 

    pnlDate.Visible = String.Equals(selVal, "date", StringComparison.OrdinalIgnoreCase); 
    pnlSubject.Visible = String.Equals(selVal, "subject", StringComparison.OrdinalIgnoreCase); 
    pnlofficer.Visible = String.Equals(selVal, "officer", StringComparison.OrdinalIgnoreCase); 
    pnlCIA.Visible = String.Equals(selVal, "cia", StringComparison.OrdinalIgnoreCase); 
    pnlMedia.Visible = String.Equals(selVal, "media", StringComparison.OrdinalIgnoreCase); 
    pnlStatus.Visible = String.Equals(selVal, "status", StringComparison.OrdinalIgnoreCase); 
} 
+0

+1謝謝....... – 2010-08-03 14:15:29

2

有是優化和改進reada之間的區別吳春明。 所以我想你正在考慮提高可讀性,因爲這裏並不需要優化。這裏沒有你可以調整的算法,以便在相當長的時間內更快地完成這項任務。

回答1和2將是我的選擇,提高可讀性

0

的,我認爲你需要一個的tabcontrol這裏..

只是隱藏的標籤,如果你不喜歡這些,並通過頁面索引碼。

好處是您可以在設計時編輯和查看GUI。

這會更容易維護。

+0

我使用jQuery與div,但我endup有問題,你可以看到我在這裏發佈的問題http://stackoverflow.com/questions/3367166/jquery-div-disappears-on-回發和我放棄使用jquery/div的想法 – 2010-08-03 14:35:32