Нет, это не в опасности.Анонимный метод, который использует локальную переменную извне этого анонимного метода, будет скомпилирован в новый класс с полем, которое сохраняет эту локальную переменную, и методом, который соответствует анонимному методу.
В вашем случае это будетсоздайте что-то вроде следующего:
class ModifiedClosure
{
private Action<Customer1, Customer2> _baseMap;
public ModifiedClosure(Action<Customer1, Customer2> baseMap)
{
_baseMap = baseMap;
}
public void Method(SpecialCustomer1 c1, SpecialCustomer2 c2)
{
_baseMap(c1, c2);
c2.SpecialProperty = c1.SpecialProperty;
}
}
Инициализация списка будет выглядеть примерно так:
Action<Customer1, Customer2> baseMap = (c1, c2) => c2.FirstName = c1.FirstName;
var list = new List<object>()
{
(Action<SpecialCustomer1,
SpecialCustomer2>)(new ModifiedClosure(baseMap).Method),
// ...
};
КСТАТИ: Ваш синтаксис немного отключен.Создание списка не скомпилируется.Это должно выглядеть так:
var list = new List<object>()
{
(Action<SpecialCustomer1, SpecialCustomer2>)((c1, c2) =>
{
baseMap(c1, c2);
c2.SpecialProperty = c1.SpecialProperty;
}),
(Action<SpecialCustomer1, SpecialCustomer2>)((c1, c2) =>
{
baseMap(c1, c2);
c2.SpecialProperty2 = c1.SpecialProperty2;
})
};