如果x
等于1
,那么我们需要来自SqlDataReader
方法的GetDataReader1
。否则,我们需要来自SqlDataReader
的{{1}}。这是唯一的区别。除此之外,所有需要的代码(它在这里说的东西)都将被复制。我怎样才能使这更优雅,所以我不必重复使用两种语句中的所有逻辑?
更新:在简化此帖子的代码时,我错过了一个额外的因素。 GetDataReader1有2个参数,GetDataReader2有3个参数。如果我创建一个GetDataReader函数,并在那里移动GetDataReader2
语句,我是否会被强制传入GetDataReader1方法当前不需要的额外参数?
If
答案 0 :(得分:3)
将x
传递给GetDataReader
并让 确定要返回的内容。
Using myDataReader As SqlDataReader = GetDataReader(x)
myDataReader.Read()
If myDataReader.HasRows Then
'do stuff here
End If
End Using
这会将If
推送到GetDataReader
,在那里您不应该有太多重复。
更新 - 关于问题的更新。
您仍然可以使用相同的机制 - 将决策推送到方法 - 除了x
之外,您只需要传递可能需要的所有参数:
Using myDataReader As SqlDataReader = GetDataReader(x, value1, value2, value3)
答案 1 :(得分:1)
将用于确定要使用哪个SqlDataReader的逻辑移动到其自己的函数中并将其传递给x
。
Using myDataReader As SqlDataReader = GetDataReader(x)
myDataReader.Read()
If myDataReader.HasRows Then
'do stuff here
End If
End Using
Private Function GetDataReader(ByVal x As Integer) As SqlDataReader
If x = 1 Then
Return GetDataReader1()
Else
Return GetDataReader2()
End If
End Function
答案 2 :(得分:0)
您无需在Using语句中创建阅读器。在
之前创建它们Dim value1, value2, value3 As String
Dim myDataReader As SqlDataReader
If x = 1 Then
myDataReader = GetDataReader1(value1, value2)
Else
myDataReader = GetDataReader2(value1, value2, value3)
End If
Using myDataReader
If myDataReader.Read() Then
'do stuff here
End If
End Using