我正在尝试过滤对象列表,每个对象都有一个日历年作为其值之一。用户键入开始年份(例如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
但是由于某种原因,它们不在这种情况下。我在这里错过了什么?
答案 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
是列表中的对象类。