为什么('a'<= / * some char * / <='z')不起作用?

问题描述 投票:1回答:4

我一直在用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'))

而且效果很好,但我不知道为什么第一个不起作用。有人可以给我解释一下吗?

c#
4个回答
4
投票

编译器解释

'a' <= command[0] <= 'f'

好像是这样写的

('a' <= command[0]) <= 'f'

1
投票

在大多数语言中,您无法像布尔表达式那样链接比较。

第二个有效,因为您一次将它分解成一个比较。

有效:a < ba < b && a < c && b < c

无效:a < b < c


0
投票

如果拆分

'a' <= command[0] <= 'f'

进入其组件(如编译器将看到的那样),您将得到

Stage 1:  'a' <= command[0]
Stage 2: (result of stage 1) <= 'f'

因此,原始语句的第二部分变为:

 true <= 'f'

这显然是您看到的错误


0
投票
if (('a' <= command[0] <= 'f') || ('A' <= command[0] <= 'F')) //Syntax Error

为什么出错: C#不支持该语法

错误:“运算符'<='不能应用于'bool'和'char'类型的操作数”

含义:编译器会解释您将'a'(它是一个字符)与command[0]<='f'(这是一个布尔值)之间的比较。

将其简化为if(char<boolean)并因此产生歧义

© www.soinside.com 2019 - 2024. All rights reserved.