.net 使用不同的集合作为引用,而不使用不同的代码集
如何在不必复制代码的情况下在两组不同的集合之间进行选择?在我的程序中,如果我的用户使用复选框,我将对选中的项目执行与对复选框相同的操作。如何在不丢失对这些项的引用的情况下创建集合变量,以便仍能向它们写入属性?使用“提取方法”重构。下面是一个简单的示例,假设这两个代码块已经很简单了:.net 使用不同的集合作为引用,而不使用不同的代码集,.net,vb.net,listview,reference,.net,Vb.net,Listview,Reference,如何在不必复制代码的情况下在两组不同的集合之间进行选择?在我的程序中,如果我的用户使用复选框,我将对选中的项目执行与对复选框相同的操作。如何在不丢失对这些项的引用的情况下创建集合变量,以便仍能向它们写入属性?使用“提取方法”重构。下面是一个简单的示例,假设这两个代码块已经很简单了: If ListView1.CheckBoxes = True Then 'using check boxes For Each lvi As ListViewItem In ListView1.Che
If ListView1.CheckBoxes = True Then
'using check boxes
For Each lvi As ListViewItem In ListView1.CheckedItems
'whole bunch of code
Next
Else
'not using check boxes
For Each lvi As ListViewItem In ListView1.SelectedItems
'the exact same whole bunch of code
Next
End If
lvi
作为参数。可能需要其他参数,但请确保lvi
是其中之一
If ListView1.CheckBoxes = True Then
'using check boxes
For Each lvi As ListViewItem In ListView1.CheckedItems
MethodCall(lvi)
Next
Else
'not using check boxes
For Each lvi As ListViewItem In ListView1.SelectedItems
MethodCall(lvi)
Next
End If
lvi
作为参数。同样,可能需要额外的参数
Private Sub ExtractedMethod1(lvi As ListViewItem)
MethodCall(lvi)
End Sub
调用代码现在如下所示:
Private Sub ExtractedMethod2(lvi As ListViewItem)
MethodCall(lvi)
End Sub
If
语句的两个分支
If ListView1.CheckBoxes = True Then
'using check boxes
For Each lvi As ListViewItem In ListView1.CheckedItems
ExtractedMethod1(lvi)
Next
Else
'not using check boxes
For Each lvi As ListViewItem In ListView1.SelectedItems
ExtractedMethod2(lvi)
Next
End If
像ReSharper这样的工具在这方面非常有用。您只需要在函数中放入类似的代码
If ListView1.CheckBoxes = True Then
'using check boxes
For Each lvi As ListViewItem In ListView1.CheckedItems
ExtractedMethod1(lvi)
Next
Else
'not using check boxes
For Each lvi As ListViewItem In ListView1.SelectedItems
ExtractedMethod1(lvi)
Next
End If
If ListView1.CheckBoxes = True Then
'using check boxes
For Each lvi As ListViewItem In ListView1.CheckedItems
SimilarCode(lvi)
Next
Else
'not using check boxes
For Each lvi As ListViewItem In ListView1.SelectedItems
SimilarCode(lvi)
Next
End If
Sub SimilarCode(ByVal lvi As ListViewItem)
'whole bunch of code
End Sub