其实:
(A>=100 && (B<100 || B<A))
等同于:
(A>=100 && B<A)
那是因为,如果 B < 100,它会自动小于 A,因为 A >= 100 并且这是证明它的代码(在 C 中,但 C# 应该是相同的):
#include <stdio.h>
static void test (int a, int b) {
printf ("a=%3d, b=%3d : ok=%d\n", a, b,
(a>=100 && (b<100 || b<a)) == (a>=100 && b<a));
}
int arr[] = {1,2,3,99,100,101,199,200,201};
int main (void) {
int i, j;
for (i = 0; i < sizeof(arr)/sizeof(*arr); i++) {
for (j = 0; j < sizeof(arr)/sizeof(*arr); j++) {
test (arr[i], arr[j]);
}
}
return 0;
}
它输出:
a= 1, b= 1 : ok=1
a= 1, b= 2 : ok=1
a= 1, b= 3 : ok=1
a= 1, b= 99 : ok=1
a= 1, b=100 : ok=1
a= 1, b=101 : ok=1
a= 1, b=199 : ok=1
a= 1, b=200 : ok=1
a= 1, b=201 : ok=1
a= 2, b= 1 : ok=1
a= 2, b= 2 : ok=1
a= 2, b= 3 : ok=1
a= 2, b= 99 : ok=1
a= 2, b=100 : ok=1
a= 2, b=101 : ok=1
a= 2, b=199 : ok=1
a= 2, b=200 : ok=1
a= 2, b=201 : ok=1
a= 3, b= 1 : ok=1
a= 3, b= 2 : ok=1
a= 3, b= 3 : ok=1
a= 3, b= 99 : ok=1
a= 3, b=100 : ok=1
a= 3, b=101 : ok=1
a= 3, b=199 : ok=1
a= 3, b=200 : ok=1
a= 3, b=201 : ok=1
a= 99, b= 1 : ok=1
a= 99, b= 2 : ok=1
a= 99, b= 3 : ok=1
a= 99, b= 99 : ok=1
a= 99, b=100 : ok=1
a= 99, b=101 : ok=1
a= 99, b=199 : ok=1
a= 99, b=200 : ok=1
a= 99, b=201 : ok=1
a=100, b= 1 : ok=1
a=100, b= 2 : ok=1
a=100, b= 3 : ok=1
a=100, b= 99 : ok=1
a=100, b=100 : ok=1
a=100, b=101 : ok=1
a=100, b=199 : ok=1
a=100, b=200 : ok=1
a=100, b=201 : ok=1
a=101, b= 1 : ok=1
a=101, b= 2 : ok=1
a=101, b= 3 : ok=1
a=101, b= 99 : ok=1
a=101, b=100 : ok=1
a=101, b=101 : ok=1
a=101, b=199 : ok=1
a=101, b=200 : ok=1
a=101, b=201 : ok=1
a=199, b= 1 : ok=1
a=199, b= 2 : ok=1
a=199, b= 3 : ok=1
a=199, b= 99 : ok=1
a=199, b=100 : ok=1
a=199, b=101 : ok=1
a=199, b=199 : ok=1
a=199, b=200 : ok=1
a=199, b=201 : ok=1
a=200, b= 1 : ok=1
a=200, b= 2 : ok=1
a=200, b= 3 : ok=1
a=200, b= 99 : ok=1
a=200, b=100 : ok=1
a=200, b=101 : ok=1
a=200, b=199 : ok=1
a=200, b=200 : ok=1
a=200, b=201 : ok=1
a=201, b= 1 : ok=1
a=201, b= 2 : ok=1
a=201, b= 3 : ok=1
a=201, b= 99 : ok=1
a=201, b=100 : ok=1
a=201, b=101 : ok=1
a=201, b=199 : ok=1
a=201, b=200 : ok=1
a=201, b=201 : ok=1
但是,如果这些只是一般项目而不是特定项目,&& 在 C# 中的 higher precedence 而不是 ||,因此您应该使用:
(A>=100 && (B<100 || B<A))