Действие <T>против вопроса анонимного метода - PullRequest
1 голос
/ 11 марта 2010

Мне ответили на вопрос, который поднял другой вопрос, почему следующее не работает? Я не понимаю. Компилятор говорит: невозможно преобразовать анонимный метод в строку. Но почему?

    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 ]

4 голосов
/ 11 марта 2010

У вас есть некоторая путаница. a уже объявлено в другом месте, поэтому измените:

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

до:

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

и должно нормально работать.

0 голосов
/ 11 марта 2010

Я думаю, это потому, что ListBoxItemCollection.Add на самом деле возвращает целое число. Так что это будет Func<string, int>, а не Action<string>.

РЕДАКТИРОВАТЬ : Неважно; Я полагаю, поскольку вы использовали оператор delegate, вам пришлось бы использовать return для его оценки как Func -подобного объекта.

...