为什么这些陈述有相反的结果?

时间:2018-09-17 14:48:02

标签: vb.net comparison

我正在尝试过滤对象列表,每个对象都有一个日历年作为其值之一。用户键入开始年份(例如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

这计算为true,然后运行代码。 _nList(i).Year是1928,_start是1920,_end是1940。从逻辑上讲,这两个语句应该等效:

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

但是由于某种原因,它们不在这种情况下。我在这里错过了什么?

2 个答案:

答案 0 :(得分:6)

严格启用选项。它将说明问题。

If a < b < c Then

它检查返回一个布尔值的“ a

您需要分为两个比较。

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

您的操作方式可能会以某种语言工作,但这不是vb.net的方式。

答案 1 :(得分:1)

此外,您可以通过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是列表中的对象类。