如何使这个if语句更优雅?

时间:2012-10-31 20:14:09

标签: vb.net if-statement sqldatareader

如果x等于1,那么我们需要来自SqlDataReader方法的GetDataReader1。否则,我们需要来自SqlDataReader的{​​{1}}。这是唯一的区别。除此之外,所有需要的代码(它在这里说的东西)都将被复制。我怎样才能使这更优雅,所以我不必重复使用两种语句中的所有逻辑?

更新:在简化此帖子的代码时,我错过了一个额外的因素。 GetDataReader1有2个参数,GetDataReader2有3个参数。如果我创建一个GetDataReader函数,并在那里移动GetDataReader2语句,我是否会被强制传入GetDataReader1方法当前不需要的额外参数?

If

3 个答案:

答案 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