如何避免重复代码来提高效率

时间:2011-08-29 11:21:07

标签: c# winforms listview datagridview refactoring

我有一个DataGrid view1和一个ListView,当我选择列表视图项时(我将ListView项传递给查询并填充DataGrid根据该项目查看)

我写了一些像这样的代码......

 private void listview_selectedindexchanged(object sender event args)
 {
     if (listview.SelectedItems.Count > 0 && listview.SelectedItems[0].Group.Name == "abc")
     {
            if(lstview.SelectedItems[0].Text.ToString() == "sfs")
            {
              method1();
            }
            else
            {
                // datagrid view1 binding
               blah.....
             }
     }
     if (lstview.SelectedItems.Count > 0 && lstview.SelectedItems[0].Group.Name == "def")
     {

           if(lstview.SelectedItems[0].Text.ToString() == "xyz")
           {
               method 1();
           }
           if(lstview.SelectedItems[0].Text.ToString() == "ghi")
           {
               method 2(a,b);
           }
           if(lstview.SelectedItems[0].Text.ToString() == "jkl")
           {
               method 2(c,d);
           }
           if(lstview.SelectedItems[0].Text.ToString() == "mno")
           {
               method 3();
           }

       }
   }  
private void method 1()
{ 
  // datagrid view1 binding
    blahh     
}
private void method 2(e,g)
{
  // datagrid view1 binding
  blah....blah..
}
private void method 3()
{

    // datagrid view1 binding
}

我已经像上面那样做了......我认为这不是一种有效的编码方式。而这段代码由很多重复的行组成,有没有办法将这段代码折射成一小串代码...... 为了提高效率?

任何提高代码效率的想法和示例片段对我都有帮助......

非常感谢...

我正在使用c#并编写WinForms应用程序.....

2 个答案:

答案 0 :(得分:4)

您可以将委托保存到listview项目中。并在选择封装项时调用它。例如,您可以像这样填写列表框:

ListViewItem item = new ListViewItem("abc");
item.Tag = new Delegate(method1);
lstview.Items.Add(item);

现在,当选择此项时,您可以执行如下方法:

private void listview_selectedindexchanged(object sender event args)
{
    ((Delegate)lstview.SelectedItems[0].Tag)(); // this will execute method1 if the item with text "abc" gets selected
}

注意:!没有测试过这段代码,但是这些代码中的某些东西应该可以工作,你不必编写If语句,只需要正确构造项目。

另请注意,对于此代码的新用户来说,这可能有点难以阅读。

答案 1 :(得分:0)

您可以轻松地提取一个新方法来执行“datagrid view1绑定”。然后从需要进行绑定的所有方法调用此方法。