2013-05-26 95 views
0

我不明白爲什麼這段代碼是錯的,我只是想封裝字典中的空白。爲什麼我不能使用「這個」。這裏?

private delegate void LotIs(string path); 

    private Dictionary<int, LotIs> lots = new Dictionary<int, LotIs> 
    { 
     {0, this.LotIsBanHummer}, 
     {1, this.LotIsDuck}, 
     {2, this.LotIsToy}, 
     {3, this.LotIsDragon}, 
     {4, this.LotIsMoney} 
    }; 

    private void LotIsBanHummer(string path) 
    { 
     lotImage.Image = LB10_VAR7.Properties.Resources.banhammer2; 
     StreamReader str = new StreamReader(path + "BunHummer.txt"); 
     textBox1.Text = str.ReadToEnd(); 
     textBox3.AppendText(textBox1.Lines[1].Split(' ')[1]); 
    } 
+0

爲了澄清你的文本,請注意,有沒有這樣的事情,「空虛」**。你所指的可以稱爲* functions *,* methods *或* routines *,但是在引用一個沒有返回值的方法時提到「void」是不正確的,就像返回int值的方法一樣不是「一個整數」。 –

回答

0

使用this在構造函數中定義Dictionary這樣。

這樣的:

private Dictionary<int, LotIs> lots = new Dictionary<int, LotIs>(); 

public YourClass() { 
    lots[0] = this.LotIsBanHummer; 
    lots[1] = this.LotIsDuck; 
    lots[2] = this.LotIsToy; 
    lots[3] = this.LotIsDragon; 
    lots[4] = this.LotIsMoney; 
} 

如果,LotIsDuck等被定義static,那麼你可以不this初始化。

2

編譯器不允許您在這樣的初始化表達式中使用this,因爲在計算表達式時,this被假定爲未初始化。請記住,在執行任何構造函數之前,對這些表達式求值爲

在構造函數中使用這個在任何時候都是允許的,即使有些字段可能還沒有被初始化,但是在那裏,您不負責任何未初始化的成員。因此,解決方案是初始化字典/在構造函數中添加初始內容(或者,在幾個構造函數中,從每個構造函數調用的方法中)。

2

從C#規格:

17.4.5.2 實例字段初始化

爲實例字段不能refe倫斯所述被創建 實例的變量初始值。因此,它是在一個變量初始值來引用 this編譯時錯誤,因爲它是一個 變量初始值通過 簡單名稱引用任何實例成員

可以將編譯時間錯誤但是,將您的初始化程序移至構造函數。

相關問題