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

6

我有一个 DataGrid 视图1和一个 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个回答

4
您可以将一个委托保存到列表视图项中,并在封装项被选中时调用它。例如,您可以像这样填充您的列表框:
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 语句,你只需要正确构造项目即可。

还要注意,对于新手来说,这可能有点难以理解。


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

除此之外,是否有可能将列表视图中选择的项目减少到单个函数中? - Glory Raj
1
我在这里缺少一些信息(例如,abcd是什么?),但就个人而言,我会创建一个带有一个方法的接口,并将从该接口派生的类放入列表视图中。将method1等的内容放入派生类中的方法中。然而,我不知道在您的情况下是否有意义,但是一个大的if..else块总是告诉您应该考虑创建一个类层次结构,并让多态性找出需要调用的正确方法。 - Daniel Hilgarth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接