2012-03-31 49 views
0

我有字典。首先我初始化它們。從C文件加載字典#

public Dictionary<string, Bitmap> lookup; 
    public Dictionary<string, Bitmap> lookup2; 
    public Dictionary<string, Bitmap> lookup3; 

然後在button_click事件上加載字典。

private void button2_Click_1(object sender, EventArgs e) 
    { 
    lookup = new Dictionary<string, Bitmap>(); 
    Bitmap l1 = new Bitmap(@"C:\1\1.bmp", true); lookup.Add("1", l1); 
    // add hundreds more 
    } 

的問題是,這種代碼佔用了近一半的我的主要文件的空間,所以我在想創建一個單獨的文件,從它加載字典。

所以我試圖創建一個單獨的類(CS)文件:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Drawing; 

namespace getDictData 
{ 
    class mydict 
    { 
     public static void loadDict() 
     { 
      Dictionary<string, Bitmap> lookup = new Dictionary<string, Bitmap>(); 
      Bitmap l1 = new Bitmap(@"C:\1\1.bmp", true); lookup.Add("1", l1); 
     } 
    } 
} 

在主文件我補充一下:

using getDictData 

,並使用它像這樣:

private void button2_Click_1(object sender, EventArgs e) 
{ 
mydict.loadDict(); 
} 

似乎沒有任何工作..所以你如何從不同的文件加載方法與C#?

編輯:我使用此代碼來檢查,如果事情被加載到詞典:

private void button8_Click(object sender, EventArgs e) 
    { 
     var targer = lookup.ToList(); // error is thrown here 
     string s = targer[0].Key; 
     textBox6.Text = "" + s; 
    } 

結果總是空,不管我怎麼更改代碼。

「值不能爲空參數名:源」

,如果我刪除主文件的字典初始化我越來越

「這個名字‘查找’不存在當前上下文存在」

+1

'沒有什麼似乎在工作什麼是什麼? – Reniuz 2012-03-31 10:02:30

+1

看起來正確。它是否編譯? 「你的一半文件空間」是什麼意思?什麼使得加載代碼如此之大?如果有很多位圖加載,也許你應該加載目錄中的所有圖像?另外:C#代碼通常具有以大寫字母開頭的名稱空間,類名稱和方法名稱。 – 2012-03-31 10:02:32

+0

您正在使用單獨的名稱空間來執行處理? – 2012-03-31 10:04:43

回答

2

您面臨的麻煩是非常微不足道的。事實上,你可以用不同的文件,類等編寫函數,這就是如何完成的。如果你嘗試這個,它肯定會工作。

public Dictionary<string, Bitmap> lookup; 
public Dictionary<string, Bitmap> lookup2; 
public Dictionary<string, Bitmap> lookup3; 

private void button2_Click_1(object sender, EventArgs e) 
{ 
    lookup = mydict.loadDict(); //now that you have loaded it. 
} 

你的類應該是:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Drawing; 

namespace getDictData 
{ 
    class mydict 
    { 
     public static Dictionary<string, Bitmap> loadDict() 
     { 
      Dictionary<string, Bitmap> lookup = new Dictionary<string, Bitmap>(); 
      Bitmap l1 = new Bitmap(@"C:\1\1.bmp", true); lookup.Add("1", l1); 
      return lookup; 
     } 
    } 
} 

而現在,

private void button8_Click(object sender, EventArgs e) 
{ 
    var targer = lookup.ToList(); //hopefully lookup is not null anymore  

    if (lookup.Count == 0) //or whatever way you want to validate depending upon the indexing u use 
    { 
     MessageBox.Show("No valid items"); //or something similar that you dont get index out of bound exception. 
     return; 
    } 

    string s = targer[0].Key; 
    textBox6.Text = "" + s; 
} 

編輯:我想有隻被加載了幾個字典。你可以這樣做,而不是在評論中回答你的問題,但不是很優雅。

1)返回從字典中加載類的詞典列表:

你的字典加載類:

class mydict 
    { 
     public static List<Dictionary<string, Bitmap>> loadAllDicts() 
     { 
      List<Dictionary<string, Bitmap>> lookups = new List<Dictionary<string, Bitmap>>(); 

      Dictionary<string, Bitmap> lookup1 = new Dictionary<string, Bitmap>(); 
      Bitmap l1 = new Bitmap(@"C:\1\1.bmp", true); 
      lookup1.Add("1", l1); 
      lookups.Add(lookup1); 

      Dictionary<string, Bitmap> lookup2 = new Dictionary<string, Bitmap>(); 
      Bitmap l2 = new Bitmap(@"C:\1\1.bmp", true); 
      lookup2.Add("1", l2); 
      lookups.Add(lookup2); 

      //etc 

      return lookups; 
     } 
    } 

2),然後

private void button2_Click_1(object sender, EventArgs e) 
    { 
     List<Dictionary<string, Bitmap>> lookups = mydict.loadAllDicts(); 

     lookup = lookups[0]; 
     lookup2 = lookups[1]; 
     lookup3 = lookups[2]; 
    } 
+0

太棒了!它確實有效,但方式與我預期的稍有不同。是否可以使用一種方法加載所有字典,而不是爲每個字典創建「loaddict1(),loadDict2(),...」,並調用「lookup1 = mydict.loadDict1(); lookup2 = mydict.loadDict2();」 ?好吧,不是這麼多,但無論如何..再次感謝您的幫助 – Alex 2012-03-31 10:40:03

+0

@Alex你有幾百個這樣的字典?我猜只是4或5?在這種情況下,採用相同的方法會更直接,更易讀。 – nawfal 2012-03-31 10:53:35

+0

關於「可讀性」問題,你肯定是正確的。我有大約9個字典 - 有75個密鑰(所以這是75行代碼),大約40,甚至10 ..我想讓他們分開是件好事畢竟。 – Alex 2012-03-31 11:08:18

0

的問題是,Dictionary<string, Bitmap> lookup = new Dictionary<string, Bitmap>();定義在你的靜態方法loadDict()並沒有參考外部。你會如何得到這些數據?你可以添加一個屬性到你的mydict類。現在

class mydict 
{ 
    public static Dictionary<string, Bitmap> MyLookup { get; private set; } 
    public static void loadDict() 
    { 
        MyLookup.Clear(); 
     Bitmap l1 = new Bitmap(@"C:\1\1.bmp", true); 
     MyLookup.Add("1", l1); 
    } 
} 

,叫mydict.loadDict();,然後你可以通過

​​

訪問您的位圖或使用函數返回值。

public static Dictionary<string, Bitmap> loadDict() 
     { 
        var dict = new Dictionary<string, Bitmap>(); 
      Bitmap l1 = new Bitmap(@"C:\1\1.bmp", true); 
      dict .Add("1", l1); 
        return dict; 
     } 
+0

不幸的是我得到一個錯誤..但@亞歷克斯感謝您的解決方案!我現在要堅持不同的方法。 – Alex 2012-03-31 10:42:59