转自pnljs 委托(Func<int,bool>)

随笔- 147 文章- 0 评论- 16

Func的介绍

经常看到  Func<int, bool>...这样的写法,看到这样的就没有心思看下去了。我们学技术还是需要静下心来。

对Func<int,bool>的Func转到定义看它的解释:

// 摘要:
    //     封装一个具有一个参数并返回 TResult 参数指定的类型值的方法。
    //
    // 参数:
    //   arg:
    //     此委托封装的方法的参数。
    //
    // 类型参数:
    //   T:
    //     此委托封装的方法的参数类型。
    //
    //   TResult:
    //     此委托封装的方法的返回值类型。
    //
    // 返回结果:
    //     此委托封装的方法的返回值。
    [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")]
    public delegate TResult Func<in T, out TResult>(T arg);

in T 代表输入参数                     1 out TResult 表示输出参数          2 再看返回值是 TResult                3 构造方法需要的参数是T               4

1与4,2与3进行对比,你发现了什么?!参数类型一样对吧。         5

Func是一个委托,委托里面可以存方法,那我们就来建一个与之匹配的方法: 以Func<int,bool>为例:

private bool IsNumberLessThen5(int number)

{return number < 5;}

Func<int,bool> f1 = IsNUmberLessThen5;

调用: bool flag= f1(4);

以下是具体代码:

using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks;

namespace ConsoleApplication1 {     class Program     {         static void Main(string[] args)         {             Func<int, bool> f1 = IsNumberLessThen5;             bool flag = f1(4);             Console.WriteLine(flag);

//以下是其它的用法,与IsNumberLessThen5作用相同。只是写法不同而已。             Func<int, bool> f2 = i => i < 5;             Func<int, bool> f3 = (i) => { return i < 5; };             Func<int, bool> f4 = delegate(int i) { return i < 5; };             flag = f2(4); Console.WriteLine(flag);             flag = f3(4); Console.WriteLine(flag);             flag = f4(4); Console.WriteLine(flag);

Console.ReadLine();         }

private static bool IsNumberLessThen5(int number)         {             if (number < 5)                 return true;             return false;         }     } }

时间: 2024-11-05 15:43:27

转自pnljs 委托(Func<int,bool>)的相关文章

.NET (二)委托第二讲:内置委托Func

在上一章节中,我们自己声明了一个委托: public delegate bool Cal(int num); 接受int参数,返回bool类型,目的是过滤集合中的 奇数 或者 偶数. .NET 为我们内置了一个泛型委托,用于处理这种情况,省去了自定义的麻烦. public delegate TResult Func<in T, out TResult>(T arg); Func是.NET定义的委托,接受任何参数,并返回自定义类型结果. 我们可以将代码修改为:public static void

Expression&lt;Func&lt;TObject, bool&gt;&gt;与Func&lt;TObject, bool&gt;的区别

Func<TObject, bool>是委托(delegate) Expression<Func<TObject, bool>>是表达式 Expression编译后就会变成delegate,才能运行.比如 Expression<Func<int, bool>> ex = x=>x < 100; Func<int, bool> func = ex.Compile(); 然后你就可以调用func: func(5) //-返回

lambda表达式Expression&lt;Func&lt;Person, bool&gt;&gt; 、Func&lt;Person, bool&gt;区别

前言: 自己通过lambda表达式的封装,将对应的表达式转成字符串的过程中,对lambda表达式有了新的认识 原因: 很多开发者对lambda表达式Expression<Func<Person, bool>> .Func<Person, bool>表示存在疑惑,现在就用代码举个简单列子 原代码: using System;using System.Collections.Generic;using System.Linq;using System.Linq.Expres

Func&lt;T, bool&gt;与Expression&lt;Func&lt;T, bool&gt;&gt;的区别

Func<T, bool>是委托(delegate) Expression<Func<T, bool>>是表达式 Expression编译后就会变成delegate,才能运行.比如 Expression<Func<int, bool>> ex = x=>x < 100; // 将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示该 lambda 表达式的委托. Func<int, bool> func = e

(转)C#中的Predicate&lt;T&gt;与Func&lt;T, bool&gt;

Delegate至少0个参数,至多32个参数,可以无返回值,也可以指定返回值类型.这个是祖宗.  Func可以接受0个至16个传入参数,必须具有返回值.  Action可以接受0个至16个传入参数,无返回值.  Predicate只能接受一个传入参数,返回值为bool类型. public delegate bool Predicate<in T>(T obj); public delegate TResult Func<in T, out TResult>(T arg); Func

C#中Predicate&lt;T&gt;与Func&lt;T, bool&gt;泛型委托的用法实例

本文以实例形式分析了C#中Predicate<T>与Func<T, bool>泛型委托的用法,分享给大家供大家参考之用.具体如下: 先来看看下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 static void Main(string[] args) { List<string> l = new List<string>(); l.Add("a"); l.Add("b");

2.C#中通过委托Func消除重复代码

阅读目录   一:重复的代码 二:C#中通过委托Func消除重复代码 一:重复代码    1 public class Persion 2 { 3 public string Name { get; set; } 4 public int Age { get; set; } 5 6 public Persion GetPersionInfo() 7 { 8 try 9 { 10 Persion persion = new Persion(); 11 persion.Name = "David&q

委托, 泛型委托,Func&lt;T&gt;和Action&lt;T&gt;

使用委托来做一些事情,大致思路是: 1.定义声明一个委托,规定输入参数和输出类型.2.写几个符合委托定义的方法.3.把方法列表赋值给委托4.执行委托 internal delegate int MyDelegate(); class Program { static void Main(string[] args) { MyDelegate d = ReturnOne; d += ReturnTwo; foreach (int i in GetAllReturnVals(d)) { Consol

拉姆达表达式 追加 条件判断 Expression&lt;Func&lt;T, bool&gt;&gt;

public static class PredicateBuilder { /// <summary> /// 机关函数应用True时:单个AND有效,多个AND有效:单个OR无效,多个OR无效:混应时写在AND后的OR有效 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static Expre