zoukankan      html  css  js  c++  java
  • C#常见委托のdelegate定义,Func,Action,Predicate总结

    委托,顾名思义,就是让其他代理,本质就是为具有共性方法组定义一个方法模板;(交流可以加qq群:568055323)

    委托常见的方式有一般委托显示定义,Func<T,TResult> (T,表示传入参数的类型,TResult)表示返回的类型,可以最多有四个参数传入,

    Action<T>,与Func的唯一区别是没有返回值;Predicate <T>就比较多单一了, 只能传入一个参数,然后返回一个bool值。

    下面是示例代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace FuncTest
    {
        class Program
        {
            // 委托声明 -- 定义一个签名:
           delegate double MathAction(double num);
           static double Double(double input)
           {
              return input* 2;
           }
            static void Main(string[] args)
            {
                //***********************普通委托
                //使用一个方法实例化委托
                MathAction ma = Double;
                double result = ma(4.5);
                Console.WriteLine(result.ToString());
    
                //匿名方法
                MathAction ma2 = delegate(double input) 
                {
                    return input * 3;
                };
                Console.WriteLine(ma2(3));
    
                //lambda表达式
                MathAction ma3 = s => s * s * s;
                Console.WriteLine(ma3(2));
    
                //**********************Func<T,Tresult>委托
                //利用Func,不用再显示定义委托
                Func<double, double> ma4 = Double;
                Console.WriteLine(ma4(5).ToString());
    
                //利用Func,匿名方法
                Func<double,double> ma5 = delegate (double input) 
                {
                    return input * input;
                };
                Console.WriteLine(ma5(5));
    
                //利用Func,lambda表达式
                Func<double, double> ma6 = s => s * s * s;
                Console.WriteLine(ma6(5));
    
                //和其他表达式结合
                // 声明了一个Func委托类型的变量selector并用Lambda表达式进行实例化 
                // 这个Lambda表达式将用来获取一个字符串并将这个字符串转化为大写并返回
                Func<string, string> selector = str => str.ToUpper();
    
                // 创建一个字符串数组
                string[] words = { "orange", "apple", "Article", "elephant" };
                // 依次遍历这个字符串数组并调用委托实例selector进行处理
                IEnumerable<String> aWords = words.Select(selector);
      
                // 输出结果到控制台
                foreach (String word in aWords)
                          Console.WriteLine(word);
                //**********************Action<T> 委托,与Func<T,TResult>唯一的区别就是没有返回值
    
                Action<string> ma7 = delegate (string input)
                {
                    Console.WriteLine(input);
                };
                ma7("from Action<string>");
    
                //***********************Predicate<T>, 形式只有一个,传入一个参数,返回一个bool值
                Predicate<string[]> predicate = delegate (string[] x)
                {
                    var r = from p in x
                                 where p.Contains("s")
                                 select p;
                    if (r.ToList().Count > 0)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                };
                string[] _value = { "charlies", "nancy", "alex", "jimmy", "selina" };
    
                if (predicate(_value))
                {
                    Console.WriteLine("They contain.");
                }
                else
                {
                    Console.WriteLine("They don't contain.");
                }
    
    
                Console.ReadLine();
    
    
            }
    
    
    
        }
    }
  • 相关阅读:
    leetcode319
    leetcode516
    leetcode46
    leetcode337
    leetcode287
    leetcode328
    leetcode241
    2018-6-30-dotnet-设计规范-·-抽象类
    2018-6-30-dotnet-设计规范-·-抽象类
    2018-8-10-WPF-如何画出1像素的线
  • 原文地址:https://www.cnblogs.com/xietianjiao/p/7095296.html
Copyright © 2011-2022 走看看