我正在尝试将一些全局字典添加到某些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";
}
}
}
在另一种形式中,我将此类称为:
namespace MainFormNamespace
{
public partial class : MainForm : Form
{
....
DictionaryLoad();
string test = DictionaryLookup("Bar") //I know "Bar" is in the dictionary
.....
}
}
当我运行它时,我在返回Dictionary_Load之前设置了一个断点,并在Dictionary_Lookup中的if语句中设置了一个断点。当我查看Dictionary_Load末尾的字典时,它已满。当我返回MainForm时,字典为空。当我在Dictionary_Lookup中断开if语句时,字典也是空的。我已经尝试将这两个类放在同一个命名空间中,但这不起作用。我的示波器有问题吗?我错过了一些明显的东西吗?
答案 0 :(得分:0)
如果您想要一个全局对象用于应用程序,请使用单例。
https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Design-Patterns-Singleton
将您的班级命名为DictionaryLoad
public static class DictionaryLoad{ }
取代
private static volatile MySingletonClass _instance;
将其更改为
private static volatile Dictionary<string,string> _instance;
取代
_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";
}
}