Как написать 2 оператора, которые отличаются только типом оператора в VB.NET - PullRequest
2 голосов
/ 19 апреля 2010

У меня есть следующий пример кода, где единственная разница между двумя частями оператора If - это операторы меньше / больше, чем *. 1001 *

Есть ли лучший способ написать это? Почти может быть в состоянии определить переменную оператора.

        If myVar = true Then

            Do While (X < Y)
                'call Method A
                'the values of X and Y will change within this loop
            Loop

        Else

            Do While (X > Y)
                'call Method A
                'the values of X and Y will change within this loop
            Loop

        End If

спасибо

Ответы [ 4 ]

2 голосов
/ 19 апреля 2010

Вы можете использовать троичный условный оператор, If, начиная с VB 2008:

Do While (If(myVar, X < Y, X > Y)))
    'call Method A
Loop

Однако, это будет проверять myVar на каждой итерации, а не только один раз, что плохо для производительности.

2 голосов
/ 19 апреля 2010
Dim from As Integer = CInt(iif(myVar, x, y))
Dim until As Integer = CInt(iif(myVar, y, x))

While from < until
    'call Method A
End While

Или если 2008 или новее, как говорит Самир, используйте троичный условный оператор, чтобы избежать бросков CInt.

1 голос
/ 19 апреля 2010

Вы можете использовать делегата:

Public Function LessThan(Of T As IComparable)(ByVal A As T, ByVal B As T) As Boolean
    Return A.CompareTo(B) < 0
End Function

Public Function GreaterThan(Of T AS IComparable)(ByVal A As T, ByVal B As T)  As Boolean
    Return A.CompareTo(B) > 0
End Function

Dim comparer As Func(Of Integer,Integer,Boolean) = AddressOf GreaterThan(Of Integer)
If myVar Then comparer = AddressOf LessThan(Of Integer)

Do While comparer(X,Y)
    ''#call Method A
    ''#the values of X and Y will change within this loop
Loop

Конечно, для этого нужен VS2008. Для большего удовольствия:

Do While CBool(Y.CompareTo(Y) * -1) = myVar
    ''#...
End While
0 голосов
/ 19 апреля 2010
Do While ((myVar And X < Y) Or (Not myVar And X > Y))
    ' call Method A
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...