当前位置: 首页 > 知识库问答 >
问题:

C#将Lambda表达式作为方法参数传递

须捷
2023-03-14

我有一个lambda表达式,我希望能够传递和重用。代码如下:

public List<IJob> getJobs(/* i want to pass the lambda expr in here */) {
  using (SqlConnection connection = new SqlConnection(getConnectionString())) {
    connection.Open();
    return connection.Query<FullTimeJob, Student, FullTimeJob>(sql, 
      (job, student) => {         
        job.Student = student;
        job.StudentId = student.Id;
        return job;
        },
        splitOn: "user_id",
        param: parameters).ToList<IJob>();   
  }   

这里的关键是,我希望能够将我在这里使用的lambda表达式传递到调用此代码的方法中,以便可以重用它。lambda表达式是我的。查询方法。我假设我想使用Action或Func,但我不太确定它的语法是什么,或者它是如何工作的。谁能给我举个例子吗?

共有3个答案

朱鹏
2023-03-14

Lambda表达式的类型为动作

Func<FullTimeJob, Student, FullTimeJob>
闾丘鸣
2023-03-14

如果我知道你需要以下代码。(通过参数传递表达式lambda)方法

public static void Method(Expression<Func<int, bool>> predicate) { 
    int[] number={1,2,3,4,5,6,7,8,9,10};
    var newList = from x in number
                  .Where(predicate.Compile()) //here compile your clausuly
                  select x;
                newList.ToList();//return a new list
    }

调用方法

Method(v => v.Equals(1));

你可以在他们的课堂上做同样的事情,看这是一个例子。

public string Name {get;set;}

public static List<Class> GetList(Expression<Func<Class, bool>> predicate)
    {
        List<Class> c = new List<Class>();
        c.Add(new Class("name1"));
        c.Add(new Class("name2"));

        var f = from g in c.
                Where (predicate.Compile())
                select g;
        f.ToList();

       return f;
    }

调用方法

Class.GetList(c=>c.Name=="yourname");

我希望这个有用

阎烨
2023-03-14

使用Func

public List<IJob> getJobs(Func<FullTimeJob, Student, FullTimeJob> lambda)
{
  using (SqlConnection connection = new SqlConnection(getConnectionString())) {
    connection.Open();
    return connection.Query<FullTimeJob, Student, FullTimeJob>(sql, 
        lambda,
        splitOn: "user_id",
        param: parameters).ToList<IJob>();   
  }  
}

你可以称之为:

getJobs((job, student) => {         
        job.Student = student;
        job.StudentId = student.Id;
        return job;
        });

或者将lambda分配给变量并将其传入。

 类似资料:
  • 我有两种几乎相似的方法: 我想写一个通用函数,如下所示: 因此,我想让这样的东西发挥作用: 实际上,我找不到如何传递和作为参数。有什么建议吗?

  • 我在我的Page中编写了以下方法.class用于重用隐式等待。 在我的测试中。我使用的类是页面工厂元素,例如: 现在我正试图从测试中调用:。类,但我得到下面的错误。 “java.lang.ClassCastException:class.com.sun.proxy.$Proxy12不能转换为class.org.openqa.selenium.By(com.sun.proxy.$Proxy12和or

  • 我正在尝试在Java中使用Lambda表达式来理解以下方法参考代码: 我的问题是,为什么函数sameTemp只有一个参数?接口声明它必须有2个参数,所以对我来说没有意义。也许hTemp实例变量对这两个都足够了?我从Java完整参考书中获得了这一点,作者在那里解释了这一点: 块引用 在程序中,请注意HighTemp有两个实例方法:

  • 最近我在使用c语言时遇到了一些问题,基本上是这样的: 在一个函数(比如intmain)中,我声明了一个变量Y=5,我有一个lambda函数,它接收一个值并将Y相加; 我的问题是:我需要将这个lambda函数传递给一个已经存在的函数,这样它就可以在另一个函数内部调用。 我尝试了几件事,但没有一个像我预期的那样工作(有些甚至不起作用): 另一个问题是我不能改变我的receives函数签名,因为代码的剩

  • 这是这个问题的延续,可能是一个更奇怪的问题。 例如,我可以使用连接两个吗?(当然,我明白,如何使用做到这一点) 以下代码完全错误,但我希望它可以解释我想做什么:

  • 本文向大家介绍C#Lambda表达式作为事件处理程序,包括了C#Lambda表达式作为事件处理程序的使用技巧和注意事项,需要的朋友参考一下 示例 Lambda表达式可用于处理事件,在以下情况下非常有用: 处理程序很短。 处理程序永远不需要取消订阅。 下面给出了一个可能使用lambda事件处理程序的良好情况: 如果有必要在代码的某个将来点取消订阅已注册的事件处理程序,则应将事件处理程序表达式保存到一