无法从字典C#中检索值

时间:2018-03-12 14:03:19

标签: c# dictionary scope

我见过几个类似的问题,但到目前为止我一直找不到合适的答案。我正在编写我的课堂作业,用户将提交一个名称及其位置,以便将这些信息存储在字典中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace locationserver
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, string> dictionary = new Dictionary<string, string>();
            RunServer(dictionary);

        }


        static void RunServer(Dictionary<string, string> dictionary)
        {
            Console.Clear();


            Console.WriteLine("Dictionary list -----------------");
            List<string> list = new List<string>(dictionary.Keys);
            foreach (string k in list)
            {
                Console.WriteLine("{0}, {1}", k, dictionary[k]);
            }
            Console.WriteLine("---------------------------------");

            try
            {
                Console.WriteLine("Server started listening...");
                while (true)
                {

                    DoRequest(socketStream, dictionary, listener);

                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
                Console.ReadLine();
                RunServer(dictionary);
            }
        }


        static void DoRequest(NetworkStream inputStream, Dictionary<string, string> dictionary, TcpListener listener)
        {

            string[] temp;
            string streamInput;

            streamInput = Console.ReadLine();
            if (streamInput.Contains(" "))
            {
                temp = streamInput.Split(' ');
                dictionary.Add(temp[0], temp[1]);
                RunServer(dictionary);
            }
            else
            {
                try
                {
                    Console.WriteLine(streamInput);
                    Console.WriteLine(dictionary[streamInput]);
                    Console.ReadLine();
                    RunServer(dictionary);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    Console.ReadLine();
                    RunServer(dictionary);
                }
            }


        }

    }
}

程序通过命令提示符运行。如果程序仅提供用户ID,这也是字典中的键值(前面示例中的1234),那么它应该写回位置(库)。

一旦收到数据以便进行错误检查,它会打印出字典,但是当我尝试访问字典中密钥的相应值时,它就不存在了。

try
                    {
                        Console.WriteLine(streamInput);
                        Console.WriteLine(dictionary[streamInput]);
                        Console.ReadLine();
                        RunServer(dictionary);
                    }

这是我尝试写入所提供密钥的值的代码块,但正如我所说,try总是失败并且我收到了错误消息。

2 个答案:

答案 0 :(得分:1)

您的问题与客户端/服务器问题无关,为什么要显示客户端服务器代码?您遇到的问题是将内容存储在数据结构中。

您的问题属于范围之一。您需要一个全局数据结构,该结构具有服务器整个生命周期的范围。它不应该是通过参数传递的本地实体。你没有理解范围界定。

static Dictionary<string, string> theLocations;

是你需要的。

这是一名学生询问我已经设定的评估BTW

答案 1 :(得分:0)

而不是你foreach (string k in list)中的StartServer,你创建了一个非常不必要的列表,它是一个工具和IEnumerate,哪个是dictionary.Keys。

您应该能够foreach (var currentKey in dictionary.Keys) { [...] }

以下是一些可能对您有帮助的示例代码:

public static void Main()
{
    Dictionary<string, string> dict = new Dictionary<string, string>();

    dict.Add("TheKeyString", "TheValueString");
    dict.Add("Water", "H2O");

    foreach (var entry in dict.Keys)
    {
        Console.WriteLine($"Key: {entry}");
    }

    Console.WriteLine($"Value: {dict["Water"]}");
}

-

output :>
Key: TheKeyString
Key: Water
Value: H2O