【问题标题】:Code returning false on equal compare?代码在相等比较时返回false?
【发布时间】:2014-03-20 13:27:41
【问题描述】:

我目前遇到的问题:

我的服务器将数据返回给客户端,其中包括一个名称。现在我希望客户获取这个名称并进行比较。但是在过去的 3 个小时里,我一直被这个问题困扰,我不想廉价解决它。

我的服务器返回一个值,然后是一个名称,例如:random23454@NAMEHERE

我使用以下方法拆分值:

string[] values = returndata.Split('@');

然后我在做:

if (textBox3.Text == values[1]) {
MessageBox.Show("equal");
}

但是,这里的问题是。我无法让它相等,我尝试了其他方法,但它只是不显示相等。

我做了什么:

将 textBox3.Text 打印到文本框并将值 [1] 打印到另一个文本框并与我的眼睛和鼠标进行比较(由于线程而使用调用)。

使用 .Trim() 函数 在 values[1] 上使用 .ToString() (只是为了它) 将它们都分配给一个完整的新字符串,修剪它们并比较它们

将比较拖到线程外使用:

this.Invoke((MethodInvoker)delegate()
                        {
                            outside(name);
                        });

并执行相同的检查。

我的代码:

 string returndata = System.Text.Encoding.ASCII.GetString(inStream);
                readData = "" + returndata;
                if (readData.Contains("@") && readData.Contains("random"))
                {


                    string[] values = returndata.Split('@');
                    string name = values[1].Trim();

                    if (textBox3.Text == name)
                    {
                        MessageBox.Show("true");
                    }
                    else
                    {
                        MessageBox.Show("false");
                        this.Invoke((MethodInvoker)delegate()
                        {
                            outside(name);
                        });

                    }

我还能做什么?我只是不明白它不相等..

提前致谢。

【问题讨论】:

  • 您需要告诉我们inStream。我强烈怀疑它是一个字节数组,其中包含实际数据,然后是一堆 0...您应该使用 string text = Encoding.ASCII.GetString(data, 0, dataRead) - 或使用 StreamReader 开始。跨度>
  • 您是否尝试将这两个值都打印到控制台?
  • 尝试修剪 TextBox 文本。 (textBox3.Text.Trim())
  • 我已经将两个值都打印到了 messageBox 和 textBox 中,它们都是一样的。
  • @user2911924 尝试使用System.Text.Encoding.UTF8.GetString(inStream); 而不是System.Text.Encoding.ASCII.GetString(inStream)

标签: c# multithreading sockets equals


【解决方案1】:

您从服务器返回的数据可能是一个字节数组。在拆分之前先尝试将响应转换为string。还可以尝试将响应(或响应的类型)打印到控制台,以便在继续之前查看您得到的结果。

还要确保每个字符串的length 相同。也许试试 utf-8 而不是 ASCII?像这样:

System.Text.Encoding.UTF8.GetString(inStream);

【讨论】:

  • 我在消息框和文本框中都看到了输出,它只是普通的纯文本。
【解决方案2】:

string name = values[1].Trim();

我想你想在这里values[2]。按照我阅读 Split 文档的方式,索引 1 处的元素将是(空白)分隔符。

【讨论】:

  • 给我一个错误,它超出了索引,此外,如果是这种情况,它也不会在 MessageBox 或 textBox 中显示纯值。无论如何感谢您的意见!
猜你喜欢
  • 2013-04-09
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 1970-01-01
相关资源
最近更新 更多