【发布时间】:2019-03-05 15:22:46
【问题描述】:
您好,我的字典初始化有问题。我必须声明一个字典并填充我从客户端接收的(用户名)和(位置)。当它找到用户名时,它应该发回位置,如果不是,它应该发回“未找到条目”,如果位置已更新,那么它应该说“确定”。现在我遇到了一个超出范围的错误,有人可以帮我解决它。谢谢。
protected static Dictionary<string, string> dict = new Dictionary<string, string>();
static void doRequest(NetworkStream socketStream)
{
try
{
StreamWriter sw = new StreamWriter(socketStream);
StreamReader sr = new StreamReader(socketStream);
String line = sr.ReadLine();
Console.WriteLine("Respond recived " + line);
String[] sections = line.Split(new char[] { ' ' }, 2);
dict.TryGetValue(sections[0],out sections[1]);
if(sections[0].Length>1)
{
sw.WriteLine(sections[1]);
sw.Flush();
}
else
{
sw.WriteLine("no entries found");
sw.Flush();
}
if(sections[1].Length>2)
{
sw.WriteLine("OK");
sw.Flush();
}
catch (Exception e)
{
Console.WriteLine(e);
}
}
【问题讨论】:
-
line包含什么?您是否使用了调试器并查看其值是多少?我敢打赌它不包含空格,使sections成为一个只有一个元素的数组。 -
您确定错误是由字典而不是数组引发的吗?发布完整的例外。我怀疑它的调用堆栈会显示错误是由
sections数组引发的 -
无论如何,这段代码不会初始化字典,它会查找值。它不会向它添加任何值
-
如果你把它分开,这会更容易处理。您尝试测试的逻辑只涉及字符串。但为了测试它,您需要创建一个
NetworkStream。这使得测试变得更加困难。相反,只需编写代码来处理字符串以外的任何内容。然后您可以轻松地对其进行测试并解决错误。最后,编写一个处理流的类,从流中读取字符串,调用另一个类,然后将结果传递给另一个流。简短版 - 不要将读取和写入流与您的字符串逻辑混为一谈。
标签: c# string dictionary methods split