C#学习笔记(二十七)泛型委托配合lambda用到极致的例子

泛型委托配合lambda用到极致的例子。

有这样一个方法:

static void DoSomeCalc<T>(Func<T, T, T>func, T x, T y)
{
    T res = func(x, y);
    Console.WriteLine(res);
}

先来分析一下这个函数:

  • 函数返回值为void空。DoSomeCalc函数名称后面接了一个<T>泛型标识符。<T>标识待特化的类型。

  • 整个DoSomeCalc函数需要三个参数:

    • 一个参数是Func委托类型的参数func,而且是泛型委托类型,这个Func泛型委托的参数所包裹的函数:需要输入两个待特化类型<T>类型的参数,返回一个<T>类型的返回值。
    • 另外两个参数是<T>类型的x和y。
  • 整个函数的函数体里面的逻辑是将后两个参数传递给传入进来的委托方法

  • 函数体的逻辑也完全满足了委托包裹函数的实现形式。两个<T>类型通过委托进来的运算输出返回一个<T>类型。

泛型委托的类型推断:使得我们在调用方法的时候可以省去对类型的声明。

上面的函数如何调用?

DoSomeCalc<int>((int a, int b) => { return a * b; }, 100, 200);

其中第一个<int>可以省略。因为泛型委托的类型推断功能。return也可以省略,可以用一个括号将函数体(lambda表示)包裹起来。实测:不用括号包裹也行。

DoSomeCalc(((int a, int b) =>  a * b), 100, 200);

输入结果:20000。

using System;

namespace DelegateExample
{
    delegate T MyDele<T>(T a, T b);
    class Program
    {
        static void Main(string[] args)
        {
            DoSomeCalc<int>((int a, int b) => a * b, 100, 200);
            DoSomeCalc(((int a, int b) =>  a * b), 100, 200);
        }

        static void DoSomeCalc<T>(Func<T, T, T>func, T x, T y)
        {
            T res = func(x, y);
            Console.WriteLine(res);
        }
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值