C# C“范围问题与”;“全球”;班
我试图在一些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() {
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";
}
}