C# 我的字符串变为只读,不会连接

C# 我的字符串变为只读,不会连接,c#,string,C#,String,我有个问题让我困惑。我正在Unity中构建一个小型多人聊天室功能。我使用以下功能发布消息: public void AddLine(string text) { GetComponent<Text>().text += "\n" + text; } public void AddLine(字符串文本) { GetComponent().text+=“\n”+文本; } 这里的问题是,在我连接到聊天服务器之前,代码工作正常,然后字符串拒绝进一步连接。我已经使用调试器验证了“

我有个问题让我困惑。我正在Unity中构建一个小型多人聊天室功能。我使用以下功能发布消息:

public void AddLine(string text)
{
    GetComponent<Text>().text += "\n" + text;
}
public void AddLine(字符串文本)
{
GetComponent().text+=“\n”+文本;
}
这里的问题是,在我连接到聊天服务器之前,代码工作正常,然后字符串拒绝进一步连接。我已经使用调试器验证了“text”参数正在向函数传递良好的信息。据我所知,一切都很好,但事实并非如此

另一方面,我将文本数据编码为字节数组,将其发送到服务器,然后在发送到客户端时将其解码回字符串。在调试器中,从服务器返回的数据看起来是正确的,但是程序只有在收到这些数据后才会中断


这个字节编码过程有没有可能把我的字符串弄乱?程序将字符串视为不存在,但在调试器中,它看起来很好。

好的,我可以回答我自己的问题。事实证明,当您解码字节数组中的字符串时,该字符串保留字节数组的长度。所以字符串的末尾有一堆调试器不会报告的空值


在这种情况下,串接字符串会失败。

如果未连接到服务器,该操作是否有效?比如说一些测试数据?他说确实是这样的
这里的问题是,在我连接到聊天服务器之前,代码工作得很好。我不确定他所说的“完美工作”是什么意思,因为他大概在连接之前不会收到消息……也许OP会对此发表评论。我的看法是,他在连接聊天服务器之前不知何故测试了代码,然后代码就运行了。我的工作假设是,这个字符串上有某种额外的垃圾,正在把它搞砸——在调试器中看不到的东西,作为编码和解码的遗迹。当我在字符串上使用正则表达式来清理它时,它是有效的。你是如何处理它的?你所说的“当你从字节数组中解码字符串时”是什么意思?我希望这意味着
Encoding.UTF8.GetString(byteArray)
,但这不会引入意外的
\0
,除非你把字节数组搞砸了。字节数组本身太大了。我在处理Steam的后端,在那里你传递一个输入,输出字节数组,里面填充了一条二进制格式的聊天信息。所以你传入一个字节数组,我已经初始化为2048大小,我得到一个字节数组,是2048,尽管消息本身只有50个字节左右。您可以将其解码为字符串,但该函数不会为您清除空值。我用string.Replace截断字节数组,用string.empty替换空字符,从而解决了这个问题。这就解决了问题。