我有一个问题的回答引起了另一个问题,为什么以下不起作用?我不明白。编译器说:无法转换匿名方法做字符串。但为什么呢?
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);
}
}
答案 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
的对象。