Action <t> vs匿名方法问题</t>

时间:2010-03-11 13:07:44

标签: c# delegates action anonymous-methods

我有一个问题的回答引起了另一个问题,为什么以下不起作用?我不明白。编译器说:无法转换匿名方法做字符串。但为什么呢?

    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);
        }
    }

2 个答案:

答案 0 :(得分:4)

你有一些变数混乱。 a已在其他地方声明,因此请更改:

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

为:

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

它应该可以正常工作。

答案 1 :(得分:0)

我认为这是因为ListBoxItemCollection.Add实际上返回一个整数。那就是Func<string, int>,而不是Action<string>

编辑:没关系;我想,因为您使用的是delegate语句,所以您必须使用return来评估它为Func的对象。