Действие<T> против вопроса анонимного метода
У меня был ответ на вопрос, который поднял другой, почему не работает следующий? Я не понимаю. Компилятор говорит: невозможно преобразовать анонимный метод в строку. Но почему?
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 ответа
Решение
У вас есть некоторая путаница. a
уже объявлено в другом месте, поэтому измените:
a.IterateObjects(delegate(string a) { listBox1.Items.Add(a); });
чтобы:
a.IterateObjects(delegate(string s) { listBox1.Items.Add(s); });
и это должно работать нормально.
Я думаю это потому что ListBoxItemCollection.Add
actually returns an integer. So that would be a Func<string, int>
не Action<string>
,
EDIT: Never mind; I guess since you were using a delegate
statement you would have had to use return
for it to evaluate as a Func
объект