[英]Passing parameter to method returning Func
我有以下 static class
public static partial class ClassX
{
private static readonly Expression<Func<Customer, CustomerDetail>> _exp = DoX();
private static readonly Func<Customer, CustomerDetail> _comp = DoX().Compile();
static ClassX() { }
public static IQueryable<CustomerDetail> ConvertDetail(this IQueryable<Customer> query)
{
query.Select(_exp);
}
public static CODEDistrictDTO ConvertDetail(this Customer customer)
{
return _comp(customer);
}
private static Expression<Func<CODEDistrictEntity, CODEDistrictDTO>> DoX()
{
}
}
我需要做的是通過“ConvertDetail”方法將參數傳遞給“DoX”方法,因此“DoX”方法基於接收到的參數構建邏輯基礎
public static partial class ClassX
{
private static readonly Expression<Func<Customer, CustomerDetail>> _exp = DoX(); //problem
private static readonly Func<Customer, CustomerDetail> _comp = DoX().Compile(); //problem
static ClassX() { }
public static IQueryable<CustomerDetail> ConvertDetail(this IQueryable<Customer> query, List<int> mlist)
{
query.Select(_exp(mlist));
}
public static CODEDistrictDTO ConvertDetail(this Customer customer, List<int> mlist)
{
return _comp(customer,mlist);
}
private static Expression<Func<CODEDistrictEntity, CODEDistrictDTO>> DoX(List<int> mlist)
{
}
}
static 只讀字段中的問題!!!
再看一下如何定義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>
定義意味着您提供了一個委托 function ,它接收一個Customer
CustomerDetail
的結果。 以下塊調用委托 function _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)
將兩個參數傳遞給該委托 function ,但它僅定義為具有一個。 要將委托更改為期望兩個參數,第二個是List<int>
類型,那么您需要將其更新為private static readonly Func<Customer, List<int>, CustomerDetail> _comp =...
請記住,如果您的DoX.Compile()
方法實際上會接受此簽名,這只會對您有所幫助 - 更新 Func 並不意味着您提供的委托會突然知道如何處理額外的參數,如果它還沒有期望的話它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.