【问题标题】:String "a" is not equal to Char "a" in C#?字符串“a”不等于C#中的字符“a”?
【发布时间】:2013-06-02 15:07:32
【问题描述】:

所以,我有一种用于解析表达式的算法。此外,无论是否有括号,都有条件方法。我正在制作表达式并将其放入字符串变量中,例如:

string expression = "6*(3+2)";

然后我让它通过解析功能。在它给了我奇怪的结果之后,我去调试解析函数并注意到那里有奇怪的东西: 当我用

从右到左遍历字符串的字符时
for (int i = (expression.Length -1); i>=0; i--) ...

它没有通过条件

if (expression[i].Equals(")")) ...

当表达式 [i] 显示在 ")" 上时,因为我在 Visual Studio 的 "Locals" 部分看到了它。 这是为什么? 我需要做的是:

if (expression[i].ToString() == ")") ...

然后我会得到正确的结果。它没有让我做 expression[i] == ")" 因为它说我不能在 char 和 string 上应用 "==" 运算符。

那么,为什么 .Equals 在 ")" 时没有通过?

【问题讨论】:

  • 两个不同数据类型的事物即使看起来相同也不能被认为是同一事物。
  • 那么为什么 OP 在这里没有出现类型错误?

标签: c# string char


【解决方案1】:

这是为什么呢?

字符与字符串不同。字符串是字符的序列expression[i] 的类型是 char,而不是 string - 所以你想将它与 char 文字进行比较:

if (expression[i] == ')')

注意单引号 (')') 而不是您使用的双引号 (")")。单引号用于字符文字;双引号用于字符串文字。

【讨论】:

  • 哇,Jon 先生,很高兴得到你的答复,看到你的书和你的 cmets,很高兴有你在这个社区:) 。所以换句话说, expression[i].Equals(')') 也是正确的。谢谢你:)
  • @Tommz:您可以使用Equals,但根据我的回答,我个人会使用==
  • char[i] == 'x' 引用应该是单一的 - 有用的问题和答案
  • @JonSkeet 如果你想做一个 != 比较,比如 string[0] != '1'。因为它似乎不起作用。谢谢
  • @omachu23:是的,它确实有效。目前尚不清楚您实际上在做什么,您期望什么或发生了什么。我建议您使用minimal reproducible example 提出一个新问题。
猜你喜欢
  • 2022-11-27
  • 2021-07-13
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多