Почему эти заявления имеют противоположный результат? - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь отфильтровать список объектов, каждый из которых имеет календарный год в качестве одного из своих значений. Пользователь вводит начальный год (например, 1920) и конечный год (1940), и любой объект, который имеет год между этими двумя значениями, добавляется в список. Поэтому для каждого объекта во всем списке я выполняю следующие условия:

If _end >= _nList(i).Year > _start Then
     filterList.Add(_nList(i))
End If

Однако это возвращает false. Но когда я изменяю его на:

If _start < _nList(i).Year <= _end Then
      filterList.Add(_nList(i))
End If

Это оценивается как истина и запускает код. _nList(i).Year - это 1928, _start - это 1920, а _end - это 1940. Логически два утверждения должны быть эквивалентны:

1940 >= 1928 > 1920
1920 < 1928 <= 1940

Но по какой-то причине они не в этом случае. Что я здесь пропустил?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Кроме того, вы можете использовать гораздо более широкий синтаксис, используя методы расширения LINQ:

Dim _filteredList = _list.Where(New Func(Of C, Boolean)(Function(i As C) As Boolean
                                                                Return i.Year > _start AndAlso i.Year < _end
                                                            End Function)).ToList()

где C - класс объектов в вашем списке.

0 голосов
/ 17 сентября 2018

Включить опцию Strict On. Это объяснит проблему.

If a < b < c Then

Он проверяет «a Вам нужно разделить на два сравнения.

If _end >= _nList(i).Year AndAlso _nList(i).Year > _start Then

То, как вы работали, может работать на каком-то языке, но vb.net совсем не такой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...