2010-03-11 25 views
1

我有一個問題回答了哪個提出了另一個問題,爲什麼以下不起作用?我不明白。編譯器說:不能轉換匿名方法做字符串。但爲什麼?動作<T> vs匿名方法問題

public List<string> list = new List<string>(); 
    private void Form1_Load(object sender, EventArgs e) 
    {  
     a.IterateObjects(B); 
     // why this does not work: 
     a.IterateObjects(delegate(string a) { listBox1.Items.Add(a); }); 
    } 
    private void B(string a) 
    { 
     listBox1.Items.Add(a); 
    } 
    public void IterateObjects(Action<string> akce) 
    { 
     foreach (string a in list) 
     { 
      akce(a); 
     } 
    } 

回答

4

你有一些變數混淆。 a已經聲明在別處,所以更改:

a.IterateObjects(delegate(string a) { listBox1.Items.Add(a); }); 

到:

a.IterateObjects(delegate(string s) { listBox1.Items.Add(s); }); 

,它應該工作的罰款。

+0

我的天:D謝謝!愚蠢的我,我在尋找什麼我想念(只是學習這東西) – Petr 2010-03-11 13:15:39

0

我認爲這是因爲ListBoxItemCollection.Add實際上返回一個整數。所以這將是一個Func<string, int>,而不是Action<string>

編輯:沒關係;我猜想,因爲您使用的是delegate聲明,您不得不使用return來評估它爲Func的對象。