1

xが等しい場合、 fromメソッド1が必要です。そうでなければ、 from が必要です。それが唯一の違いです。それ以外は、必要なすべてのコード (ここで何かを行うと書かれている場所) が複製されます。両方の using ステートメント内ですべてのロジックを繰り返す必要がないように、これをよりエレガントにするにはどうすればよいですか?SqlDataReaderGetDataReader1SqlDataReaderGetDataReader2

更新:この投稿のコードを単純化する際に、追加の要因を見逃していました。GetDataReader1 は 2 つのパラメーターを受け取り、GetDataReader2 は 3 つのパラメーターを受け取ります。GetDataReader 関数を 1 つ作成し、Ifそこにステートメントを移動すると、現在 GetDataReader1 メソッドに必要のない余分なパラメーターを渡す必要がありますか?

Dim value1, value2, value3 As String

If x = 1 Then
    Using myDataReader As SqlDataReader = GetDataReader1(value1, value2)
        myDataReader.Read()
        If myDataReader.HasRows Then
            'do stuff here
        End If
     End Using
 Else
     Using myDataReader As SqlDataReader = GetDataReader2(value1, value2, value3)
         myDataReader.Read()
         If myDataReader.HasRows Then
             'do stuff here
         End If
     End Using
 End If
4

3 に答える 3

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)
于 2012-10-31T20:16:27.977 に答える
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
于 2012-10-31T20:20:21.940 に答える
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
于 2012-10-31T20:47:06.023 に答える