словарь и строка разделены на сервере - PullRequest
0 голосов
/ 05 марта 2019

Привет, у меня проблема с инициализацией моего словаря. Я должен объявить словарь и заполнить (userName) и (location), которые я получаю от клиента. когда он находит userName, он должен отправить обратно местоположение, если нет, он должен отправить обратно «записи не найдены», а если местоположение обновлено, то он должен сказать «ОК». Прямо сейчас я получаю ошибку «вне пределов», может кто-нибудь помочь мне исправить это. спасибо.

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);

    }

}

1 Ответ

1 голос
/ 05 марта 2019

Потенциально, эти 2 строки являются проблемой:

String[] sections = line.Split(new char[] { ' ' }, 2);
dict.TryGetValue(sections[0],out sections[1]);

Если line.Split возвращает 1 строку (скажем, в строке нет пробелов), то секции [1] (вторая строка вмассив) не будет существовать, и вы получите исключение IndexOutOfRangeException.

Я бы порекомендовал использовать отдельную переменную для TryGet

dict.TryGetValue(sections[0],var out foundValue);
...