2010-08-03 3 views
7

как я могу оптимизировать этот код? Я не хочу, чтобы был аргумент case, есть ли способ, которым я могу улучшить этот код?как я могу сделать этот код более оптимизированным

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

Возможно, я бы добавил скобки, чтобы сделать его более читаемым. –

+0

+1: простой и понятный – RedFilter

+0

@ray dey - Fairy noof. Готово. – GenericTypeTea

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

+0

+1 Хорошая мысль ... –

+1

Что такое downvote? Я знаю, что код не делает * точно * то же самое, что и оригинальное; это просто показать эту идею. – NullUserException

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 спасибо ....... –

2

Там это разница между оптимизацией и улучшением reada Билити. Так что, я думаю, вы смотрите на улучшение читаемости, поскольку оптимизация на самом деле здесь не нужна. Здесь нет никакого алгоритма, который вы можете настроить, чтобы сделать это быстрее в течение значительного времени.

Ответ 1 и 2 будет мой выбор улучшения читаемости

0

Я думаю, что вам нужно TabControl здесь ..

Просто скрыть вкладки, если вам не нравится, и те, и индекс страницы с помощью код.

Преимущество в том, что вы сможете редактировать и просматривать графический интерфейс в режиме разработки.

Это будет намного проще в обслуживании.

+0

Я использую jquery с div, но у меня есть проблемы, вы можете увидеть вопрос, который я разместил здесь http://stackoverflow.com/questions/3367166/jquery-div-disappears-on- postback, и я отбрасываю идею использования jquery/div –

Смежные вопросы