C# C“范围问题与”;“全球”;班

C# C“范围问题与”;“全球”;班,c#,dictionary,scope,C#,Dictionary,Scope,我试图在一些C#代码中添加一个全局字典。我知道在C#中技术上不存在全局变量,所以我使用的是一个没有名称空间的静态类。我的代码如下所示 public static class GlobalClass { public static Dictionary<string,string> Foo = new Dictionary<string,string>(); public static void Dictionary_Load() {

我试图在一些C#代码中添加一个全局字典。我知道在C#中技术上不存在全局变量,所以我使用的是一个没有名称空间的静态类。我的代码如下所示

public static class GlobalClass
{
    public static Dictionary<string,string> Foo = new Dictionary<string,string>();
    public static void Dictionary_Load()
    {
        //Load Dictionary from database.
        // When I break at the end of this function I see the Dictionary has data in it.
    }

    public static string Dictionary_Lookup(input)
    {
        if(Foo.ContainsKey(input))
        {
            string return_string = Foo[input];
            return return_string;
        }else
        {
            return "ERROR";
        }
    }
}

当我运行这个程序时,我在返回Dictionary\u Load之前以及Dictionary\u Lookup中的if语句处设置了一个断点。当我在字典加载末尾查看字典时,它已满。当我返回MainForm时,字典是空的。当我在Dictionary_Lookup中中断if语句时,Dictionary也是空的。我试着将这两个类放在同一个名称空间中,但没有成功。我的望远镜有问题吗?我在这里遗漏了一些明显的东西吗?

如果您想要应用程序的全局对象,请使用单例

将您的类命名为DictionaryLoad

public static class DictionaryLoad{ }
代替

private static volatile MySingletonClass _instance;
_instance = new MySingletonClass();
换成

private static volatile Dictionary<string,string> _instance;
使用


Dictionary\u Lookup
Dictionary Lookup
不是一回事。另外,使用
TryGetValue
而不是
ContainsKey
[]
。另外,请包括从
Foo
读取或写入的所有代码。提供一个程序,该程序实际上再现了问题,并且没有明显的打字错误,例如缺少下栏和额外的冒号。让你的程序变得越来越简单,直到问题消失——这应该告诉你它在哪里——或者你有适合某个页面的东西,有人可以帮助你。请参阅以寻求帮助。
_instance = new MySingletonClass();
_instance = new Dictionary<string, string>() and load the dictionary.
public static string Dictionary_Lookup(input)
    {   //DictionaryLoad.Instance will return the dictionary now. 

        if(DictionaryLoad.Instance.ContainsKey(input))
        {
            string return_string = DictionaryLoad.Instance[input];
            return return_string;
        }else
        {
            return "ERROR";
        }
    }