【问题标题】:how to avoid the repeated code to increase the efficiency如何避免重复代码以提高效率
【发布时间】:2011-08-29 11:21:06
【问题描述】:

我有一个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
}

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

任何提高代码效率的想法和示例 sn-ps 都会对我有所帮助...

提前非常感谢....

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

【问题讨论】:

    标签: c# winforms listview datagridview refactoring


    【解决方案1】:

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

    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 语句,你只需要正确地构造项目。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 除此之外,还有可能将列表视图中的选定项目缩减为一个函数...
      • 我在这里遗漏了一些信息(例如,abcd 是什么?),但就个人而言,我会使用一种方法和类创建一个接口从该接口派生并将它们放入列表视图中。将method1等的内容放在派生类的方法中。但是,我不知道这在您的情况下是否有意义,但是一个大的 if..else 块总是告诉您应该考虑创建一个类层次结构并让多态性找出需要调用的正确方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2017-04-21
      • 2010-10-27
      • 2012-04-26
      • 2011-08-29
      • 1970-01-01
      相关资源
      最近更新 更多