Еще раз взглянем на синтаксис определения Func<>
:
https://docs.microsoft.com/en-us/dotnet/api/system.func-2
https://docs.microsoft.com/en-us/dotnet/api/system.func-3
public delegate TResult Func<in T,out TResult>(T arg);
public delegate TResult Func<in T1,in T2,out TResult>(T1 arg1, T2 arg2);
Определение, которое вы применили вверху для Func<Customer, CustomerDetail>
, означает, что вы предоставляете функцию делегата, которая принимает один параметр типа Customer
и возвращает результат типа CustomerDetail
. В следующем блоке вызывается функция делегата _comp
со значением customer
в качестве этого параметра.
public static CODEDistrictDTO ConvertDetail(this Customer customer)
{
return _comp(customer); // <- Calls our delegate Func<Customer,CustomerDetail> with a Customer param, returns a CustomerDetail
}
В обновленном коде вы внезапно начинаете пытаться передать два параметра этой функции делегата с помощью _comp(customer,mlist)
, но он определяется только как имеющий. Чтобы изменить делегата на два параметра со вторым типом List<int>
, вам потребуется обновить его до private static readonly Func<Customer, List<int>, CustomerDetail> _comp = ...
Имейте в виду, что это поможет вам, только если ваш DoX.Compile()
метод фактически примет эту подпись - обновление Fun c не означает, что предоставленный вами делегат внезапно узнает, что делать с дополнительным параметром, если он этого еще не ожидал.