我想添加什麼將相當於一個C#代碼的全局字典。我知道全局變量在技術上並不存在於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語句中斷時,字典也是空的。我試着把這兩個類放在同一個命名空間中,但這並不起作用。我的範圍有問題嗎?我在這裏錯過了很明顯的東西嗎
'Dictionary_Lookup'和'DictionaryLookup'是不一樣的東西。 – mjwills
另外,使用'TryGetValue'而不是'ContainsKey'和'[]'。還請包括所有讀取或寫入'Foo'的**代碼。 – mjwills
提供一個*實際上重現問題的程序*,並且沒有明顯的錯別字,如缺少下劃線和額外的冒號。讓你的程序變得更簡單更簡單,直到問題消失 - 這應該告訴你它在哪裏 - 或者你有什麼東西可以放到某個人可以幫助你的頁面上。請參閱https://stackoverflow.com/help/mcve尋求幫助。 –