簡體   English   中英

將參數傳遞給返回 Func 的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM