2013-11-08 2 views
0

Предположат, что я хочу, чтобы подготовить некоторые List<Action> listOfMethods или лучше List<Func> listOfMethods с их параметрами для последующего выполнения с помощью:Добавить действия в список для последующего выполнения

foreach (var action in listOfMethods) 
{ 
    action.Invoke();     
} 

Пути ниже добавления методов вызывают немедленные выполнение которого я не хочу:

listOfMethods.Add(() => processor.DoStuff(m1Parameters)); 

Есть ли способ добавить метод с его параметрами без немедленного выполнения?

+10

Вы уверены, что [ваш второй метод вызывает немедленное выполнение] (http://ideone.com/8FLNqR)? –

+3

Этот способ не может вызвать немедленное выполнение. Покажите нам свой * настоящий * код. – Dennis

+0

Предпосылка вашего вопроса представляется ошибочной. То, что вы добавляете в свой список, идеально подходит для отсроченного исполнения и не приведет к тому, что тела лямбды будут выполнены. – spender

ответ

2

Когда вы создаете лямбда-выражение, например () => processor.DoStuff(m1Parameters), тело лямбда оно не выполняется.

Когда вы пишете строку:

listOfMethods.Add(() => processor.DoStuff(m1Parameters)); 

Метод DoStuff это не выполняется, но после этого блока, может быть что-то, что стреляет лямбда-выражение.

Как ваш блок

foreach (var action in listOfMethods) 
{ 
    action.Invoke();     
} 

Вероятно, на этом этапе действие увольняют.

+0

Спасибо @JonnyPiazzi, я нашел свою ошибку! DoStuff фактически запущен в другом месте кода, а добавление ** не вызывает немедленного выполнения. – hdoghmen

Смежные вопросы