我一直在用C#上在线课程,在解决我遇到的一项任务时:
我需要写一段代码来确定一个单词的第一个字母是否在'A'和'F'之间,所以我写了以下if语句:
string command= Console.ReadLine();
if (('a' <= command[0] <= 'f') || ('A' <= command[0] <= 'F'))
并且给了我以下错误:“运算符'<='不能应用于'bool'和'char'类型的操作数”
所以,在挠头之后,我用这个代替了它:
if (('a' <= command[0] && command[0] <= 'f') || ('A' <= command[0] && command[0] <= 'F'))
而且效果很好,但我不知道为什么第一个不起作用。有人可以给我解释一下吗?
编译器解释
'a' <= command[0] <= 'f'
好像是这样写的
('a' <= command[0]) <= 'f'
在大多数语言中,您无法像布尔表达式那样链接比较。
第二个有效,因为您一次将它分解成一个比较。
有效:a < b
a < b && a < c && b < c
无效:a < b < c
如果拆分
'a' <= command[0] <= 'f'
进入其组件(如编译器将看到的那样),您将得到
Stage 1: 'a' <= command[0]
Stage 2: (result of stage 1) <= 'f'
因此,原始语句的第二部分变为:
true <= 'f'
这显然是您看到的错误
if (('a' <= command[0] <= 'f') || ('A' <= command[0] <= 'F')) //Syntax Error
为什么出错: C#不支持该语法
错误:“运算符'<='不能应用于'bool'和'char'类型的操作数”
含义:编译器会解释您将'a'
(它是一个字符)与command[0]<='f'
(这是一个布尔值)之间的比较。
将其简化为if(char<boolean)
并因此产生歧义