C# 比较 2 个字符串总是 return false
C# Comparing 2 strings always return false
我试图让程序响应微控制器发送的某些词,但是当我将接收到的词与预定义词进行比较时,它总是 returns 错误。
private void ReadData()
{
if (serialPort1.IsOpen == true)
{
if (serialPort1.BytesToRead > 0)
{
string readBuffer = serialPort1.ReadLine();
textBox2.Text = readBuffer;
if (readBuffer.Equals("A")) //MY MAIN PROBLEM
{
textBox2.Text += "YEP";
}
else
{
textBox2.Text += "NOPE";
}
}
}
}
基本上当微控制器发送字母"A"时,它读取它并将其存储到readBuffer
字符串中,甚至在textbox(textBox2)
中打印出来。我的结果始终是 textbox
中的 ANOPE(A 是微控制器发送的内容,NOPE 始终存在,因为 if 失败)。
我最近开始使用 C#,花了几天时间试图解决这个问题,但我似乎真的找不到解决一个看似简单的问题的方法。
我向您提交两件事:
1。事情并不总是像他们看起来的那样:
使用 readBuffer.Trim().Equals("A") 代替。
- readBuffer.Equals("A") 执行序数(case-sensitive 和 culture-insensitive)比较。
A = A 但 A ≠ a 如果您使用 .Equals 来比较它们。
所以归根结底,试试这个:
if (readBuffer.Trim().ToUpper().Equals("A"))
感谢 Willem Van Onsem 和 René Vogt,我解决了这个问题。
它读取数据存入readBuffer后,还包含了\r(回车return),使得字符串实际上是"A\r",这就是为什么它和"A"相比总是false的原因.
我试图让程序响应微控制器发送的某些词,但是当我将接收到的词与预定义词进行比较时,它总是 returns 错误。
private void ReadData()
{
if (serialPort1.IsOpen == true)
{
if (serialPort1.BytesToRead > 0)
{
string readBuffer = serialPort1.ReadLine();
textBox2.Text = readBuffer;
if (readBuffer.Equals("A")) //MY MAIN PROBLEM
{
textBox2.Text += "YEP";
}
else
{
textBox2.Text += "NOPE";
}
}
}
}
基本上当微控制器发送字母"A"时,它读取它并将其存储到readBuffer
字符串中,甚至在textbox(textBox2)
中打印出来。我的结果始终是 textbox
中的 ANOPE(A 是微控制器发送的内容,NOPE 始终存在,因为 if 失败)。
我最近开始使用 C#,花了几天时间试图解决这个问题,但我似乎真的找不到解决一个看似简单的问题的方法。
我向您提交两件事:
1。事情并不总是像他们看起来的那样:
使用 readBuffer.Trim().Equals("A") 代替。
- readBuffer.Equals("A") 执行序数(case-sensitive 和 culture-insensitive)比较。
A = A 但 A ≠ a 如果您使用 .Equals 来比较它们。
所以归根结底,试试这个:
if (readBuffer.Trim().ToUpper().Equals("A"))
感谢 Willem Van Onsem 和 René Vogt,我解决了这个问题。 它读取数据存入readBuffer后,还包含了\r(回车return),使得字符串实际上是"A\r",这就是为什么它和"A"相比总是false的原因.