代码在相等比较时返回false?

时间:2014-03-20 13:27:42

标签: c# multithreading sockets equals

我目前遇到的问题:

我的服务器将数据返回给客户端,这包括一个名称。现在我希望客户端获取此名称并进行比较。然而,在过去的3个小时里,我遇到了这个问题而且我不想便宜地解决这个问题。

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

我使用以下方法拆分价值:

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

然后我在做:

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

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

我做了什么:

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

使用.Trim()函数 在值[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);
                        });

                    }

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

还要确保每个字符串的length相同。也许尝试使用utf-8代替ASCII?像这样:

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

答案 1 :(得分:0)

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

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