Action与Func 用法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ActionFunc
{

//Action与Func 都是  net内置泛型委托.

//1 Action  没返回值 , 2 Func  有返回值
   static class Program
   {
        static void Main(string[] args)
        {

//func 简单Lambda用法
               Func<int> f1 = () => {
                        return 10;
               };
               Console.WriteLine(f1());

//func 简单Lambda用法2
               Func<string, int, string> f2 = (x, y) =>
               {
                          return x + y;
               };
              Console.WriteLine(f2("你好",666));

//action 简单Lambda用法
              Action<int, int> ac1 = (x, y) =>
              {
                    Console.WriteLine("{0}*{1}={2}",x,y, x * y);
              };
              ac1(10, 99);

//action使用
              Actiontmp<int, int>((t1, t2) => { Console.WriteLine("Actiontmp:{0}+{1}={2}", t1, t2, t1 + t2); }, 12, 15);

//初始值
              List<int> list = new List<int>() { 10, 22, 2, 5, 89, 75 };

//func用法获取 实体
             try {
                  var entity = list.GetEntity(m => m > 100);
                  Console.WriteLine(entity);
              }
             catch {
                  var d = 222;
             }

//func用法获取 列表
             var nlist = list.GetSelect(m => m > 6);
             foreach (var entity in nlist)
             {
                 Console.WriteLine(entity);
             }
             Console.ReadKey();

}

//func用法获取 实体
     public static TData GetEntity<TData>(this IEnumerable<TData> list, Func<TData, bool> func)
     {
            foreach (TData entity in list)
            {
                  if (func(entity))
                  {
                       return entity;
                  }
           }

throw new Exception("不存在满足条件的第一个元素!");
            //return ;
     }

//func用法获取 列表
      public static List<TData> GetSelect<TData>(this IEnumerable<TData> list, Func<TData, bool> func)
      { 
               List<TData> nlist = new List<TData>();
               foreach (TData entity in list)
               {
                         if (func(entity))
                         {
                                nlist.Add(entity);
                         }
                }
                return nlist;
       }

//action使用
       public static void Actiontmp<T1,T2>(Action<T1,T2> act, T1 t1, T2 t2) {
                       act(t1, t2);
       }

}

}

原文地址:https://www.cnblogs.com/chxl800/p/8889591.html

时间: 2024-10-30 06:12:35

Action与Func 用法的相关文章

C#之Action和Func的用法

以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少.这两种方式我们也可以去实践的过程去慢慢运用. 先说一下委托: 模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养).可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托.开始

C#action和func的使用

以前我都是通过定义一个delegate来写委托的,但是最近看一些外国人写的源码都是用action和func方式来写,当时感觉对这很陌生所以看起源码也觉得陌生,所以我就花费时间来学习下这两种方式,然后发现确实代码简洁了不少.这两种方式我们也可以去实践的过程去慢慢运用. 先说一下委托: 模拟一下场景:小明最近学习情绪高涨,以前买的书已经满足不了欲望,打算去买本(一个程序员的自我修养).可是呢以前总是跑书厂买,nm,太远了扛不住,就去跑去附近书店去买,小明去给钱就弄了一本书回来,这个过程就是委托.开始

[C#] 委托Action和Func

一.说明 一般我们定义委托都是有如下两步: public delegate void MyDelegate(string name);//定义委托public MyDelegate myDelegate; //使用委托 .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-col

委托之Action和Func区别

一.说明 一般我们定义委托都是有如下两步: public delegate void MyDelegate(string name);//定义委托 public MyDelegate myDelegate; //使用委托 但.Net也提供了定义好的委托,我们可以直接使用. 二.定义 System.Action 无返回值 Action: public delegate void Action (); Action< T >: public delegate void Action< T &

C# 中的delegate、event、Action、Func

缘起: 之前一直很纠结C#中(delegate.event.Action.Func)的用法,这么多方法,感觉每次使用的时候好像都没啥区别,老感觉微软有多此一举之嫌,不过今天花了点时间好好研究了下,才发现他们实质上的区别. 解惑: 我发现,这四种类型中不管哪种,其实都属于委托,只是展现的形式不同而已,无论哪种,其实都可以采用delegate实现,为什么会衍生出其他三种形式,我猜是为了方便开发者使用,因为我们会发现定义一个delegate其实还是蛮费劲的,至少会比其他三种多一条定义语句,使用起来也不

C#高级功能(三)Action、Func,Tuple

Action和Func泛型委托实际上就是一个.NET Framework预定义的委托,3.5引入的特性.基本涵盖了所有常用的委托,所以一般不用用户重新声明. Action系列泛型委托,是没有返回参数的委托,最多可以有16参数,也可以没有参数:Func系列的委托是有返回值的委托,最多可以有16个参数: 元组是C# 4.0引入的一个新特性,编写的时候需要基于.NET Framework 4.0或者更高版本.元组使用泛型来简化一个类的定义. 提供用于创造元组对象的静态方法.最多可以提供创建新的 8 元

EXPLAINING WHAT ACTION AND FUNC ARE

http://simpleprogrammer.com/2010/09/24/explaining-what-action-and-func-are/ Explaining What Action And Func Are In C#, Action and Func are extremely useful tools for reducing duplication in code and decreasing coupling. It is a shame that many develo

理解学习Func用法

//Func用法 public static class FuncDemo{ public static void TestFunc(){ List<User> usList = Five.GetUserList(); //Select是Func的委托 //public delegate TResult Func<in T,out TResult>(T arg); //out TResult可以自定义输出类型,可以有多少输入in T //usList.Select(new Func

使用Action、Func和Lambda表达式

在.NET在,我们经常使用委托,委托的作用不必多说,在.NET 2.0之前,我们在使用委托之前,得自定义一个委托类型,再使用这个自定义的委托类型定义一个委托字段或变量..NET 2.0给我们带来了Action.Func两个泛型委托,.NET3.0给我们带来了Lambda,这一切使得委托的定义和使用变得简单起来.下面的例子中的委托都使用了Lambda表达式. 一.Action系列的泛型委托 Action系列的委托定义的是没有返回值(返回值为void)的委托.它有多个版本包括没有输入参数,1个输入参