向返回Func的方法传递参数

问题描述 投票:0回答:1

我有以下静态类

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)
        {

        }
    }

问题在静态readonly字段!!!

c#
1个回答
0
投票

再来看看一个语法是怎样的。Func<> 被定义。

https:/docs.microsoft.comen-usdotnetapisystem.func-2。

https:/docs.microsoft.comen-usdotnetapisystem.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() 方法实际上会接受这个签名--更新Func并不意味着你提供的委托人会突然知道如何处理额外的参数,如果它还没有期待它的话。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.