2015-04-29 33 views
1

我正在創建一個VSTO插件。我希望在Outlook開始時創建一個字典,然後我可以從OutlookRibbon類中的方法訪問它。創建這樣一本字典的最佳實踐或適當的方法是什麼?我現在有一種方法,即在使用它的方法中創建字典,因爲它每次都會調用它,效率非常低。下面是代碼:VSTO Addin中的C#訪問數據

public partial class OutlookRibbon 
{ 
    private void OutlookRibbon_Load(object sender, RibbonUIEventArgs e) 
    { 
     genMyDict(); 
    } 

    private void button1_Click(object sender, RibbonControlEventArgs e) 
    { 
     Archive(); 
    } 
    void genMyDict() 
    { 
     Dictionary<string, string> myDict= new Dictionary<string, string>(); 
     myDict.Add("@x.com", "x"); 
     // many lines of this 

    } 

    void Archive() 
    { 
     if (myDict.ContainsKey("@x.com")) { // run code } 
    } 

顯然,這會引發錯誤myDict在目前情況下不存在存檔()

我應該如何構建這種以便詞典只能創建一個時間,但仍然可以從OutlookRibbon類中的其他方法訪問?我似乎無法使其工作。有沒有更好的方法來創建在VSTO outlook插件中使用像這樣的字典?

+0

無恥插件 - >查看我的文章[C#Dictionary Tricks](http://omegacoder.com/?p=188)瞭解一些很酷的操作字典的方法。 – OmegaMan

回答

1

myDict不會在目前情況下通過使其成爲OutlookRibbon類的屬性存在

更改詞典的範圍。這將擴大其範圍遠離方法genMyDict本地化堆棧

public Dictionary<string, string> MyDictionary { get; set; } 

void genMyDict() 
{ 
    MyDictionary = new Dictionary<string, string>(); 
    MyDictionary.Add("@x.com", "x"); 
    ... 
} 

void Archive() 
{ 
    if (MyDictionary.ContainsKey("@x.com")) { // run code } 
} 

這將允許一切訪問它。對於範圍的改變,只允許一種方法訪問整個班級。

+0

我無法找到構造函數,因爲我認爲這是生成的,我不想意外覆蓋它。 – shenk

+0

@shenk對不起,我錯誤的私有方法'genMyDict'作爲構造函數。因此,不要像我說的那樣在構造函數中分配字典,而應該忘記將分配保存在'genMyDict'中,而是將其分配給您在類「OutlookRibbon」中爲其創建的屬性。 – OmegaMan

+0

你能給我一個小例子嗎? – shenk

相關問題