我正在尝试过滤一个对象列表,每个对象都有一个日历年作为其值之一.用户键入开始年份(例如1920年)和结束年度(1940年),并且将具有这两个值之间的年份的任何对象添加到列表中.因此,对于整个列表中的每个对象,我执行以下条件:
If _end >= _nList(i).Year > _start Then
filterList.Add(_nList(i))
End If
Run Code Online (Sandbox Code Playgroud)
但是,这会返回false.但当我改变它时:
If _start < _nList(i).Year <= _end Then
filterList.Add(_nList(i))
End If
Run Code Online (Sandbox Code Playgroud)
这评估为true,并运行代码._nList(i).Year是1928年,_start是1920年,_end是1940年.从逻辑上讲,这两个陈述应该是等价的:
1940 >= 1928 > 1920
1920 < 1928 <= 1940
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,他们不是这种情况.我错过了什么?
选项严格打开.它将解释这个问题.
If a < b < c Then
Run Code Online (Sandbox Code Playgroud)
它检查"a <b",它返回一个布尔值.然后将该布尔值与"<c"进行比较,这是不可能的.它会将"a <b"返回的布尔值转换为整数,然后将该值与"[converted Boolean] <c"进行比较.这不是你想要的,这个错误将与Option Strict On一起显示.
你需要分成两个比较.
If _end >= _nList(i).Year AndAlso _nList(i).Year > _start Then
Run Code Online (Sandbox Code Playgroud)
你的方式可能会用某种语言,但这不是vb.net的方式.
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |