Какова альтернатива оператору if с большим количеством условий или?

#vb.net

#vb.net

Вопрос:

У меня есть панель, которую я использую в качестве графики. Я не хочу, чтобы при перемещении мыши в некоторые точки на этой панели курсор мыши менялся. Я использовал приведенный ниже код, который работает нормально, но я не знаю, что делать, если у меня 100 баллов или больше.

     Dim targetpoints As New List(Of Point)
        targetpoints.Add(New Drawing.Point(50, 50))
        targetpoints.Add(New Drawing.Point(200, 50))
        targetpoints.Add(New Drawing.Point(50, 200))
        targetpoints.Add(New Drawing.Point(200, 200))

        If CheckRange(e.X, e.Y, targetpoints(0).X, targetpoints(0).Y) OrElse
            CheckRange(e.X, e.Y, targetpoints(1).X, targetpoints(1).Y) OrElse
            CheckRange(e.X, e.Y, targetpoints(2).X, targetpoints(2).Y) OrElse
                      CheckRange(e.X, e.Y, targetpoints(3).X, targetpoints(3).Y) Then
            Me.Cursor = Cursors.Cross
        Else
            Me.Cursor = Cursors.Default
        End If
Private Function CheckRange(X As Integer, Y As Integer, TargetX As Integer, TargetY As Integer) As Boolean
    Dim Range As Boolean
    If Math.Abs(X - TargetX) <= (5) AndAlso Math.Abs(Y - TargetY) <= 5 Then
        Range = True
    Else
        Range = False
    End If
    Return Range
End Function
  

Комментарии:

1. Обратите внимание, что ваш CheckRange метод слишком подробный. Все, что вам нужно, это Return Math.Abs(X - TargetX) <= 5 AndAlso Math.Abs(Y - TargetY) <= 5 .

Ответ №1:

 If targetpoints.Any(Function(p) CheckRange(e.X, e.Y, p.X, p.Y)) Then
  

Смотрите Документацию по Any методу здесь .

Комментарии:

1. что, если нам нужно получить ту сущность, для которой выполнено условие?

2. @AnasAhmed, если у вас есть новый вопрос, опубликуйте новый вопрос, содержащий всю и только информацию, относящуюся к этому новому вопросу. Если уместно предоставить ссылку на этот вопрос, то обязательно сделайте это.

3. @AnasAhmed, если бы вы последовали совету упростить CheckRange метод, как я предложил в своем комментарии к вопросу, вы могли бы вообще отказаться от этого метода, если только вы не хотите вызывать его в другом месте. тоже. Вы могли бы просто изменить это If утверждение на If targetpoints.Any(Function(p) Math.Abs(e.X - p.X) <= 5 AndAlso Math.Abs(e.Y - p.Y) <= 5) Then . В противном случае, если у этого метода нет документации, объясняющей, что он делает, он не имеет никакой ценности. Простой комментарий к If оператору, объясняющий, что он делает, был бы лучше.