有使用过JS的朋友,相信都知道function。JS中的function是可以在里面在定义一个作为内部使用的。有时为了控制作用域,或者这种小函数只在这个函数体内会使用,所以就不希望在外部在作额外的定义。那C#中有没有这样类似的方式呢?答案是有的。

在C#中要实现,需要用到的是委托和lambda表达式。对于lambda表达式,是可以实现匿名函数定义和挂接委托事件的。具体的可参见该文C#利用lambda实现委托事件的挂接。

要实现函数内创建内部函数,至少有两种方式可以用。

第一种:Func<>.

第二种:Action<>

Func和Action本质上都是委托,所不同的是Func可以输出返回值,而Action是没有返回值。下面给出实现的代码。

 private void outputInfo(string info){Func<int,string, string> format = (count,message) =>{return message + " count:" + count.ToString();};Action<string> showMessage = (message) =>{Console.WriteLine(message);};string formatInfo = format(1, info);showMessage(formatInfo);}

在outputInfo函数中又定义了两个函数format和showMessage。

其中format的前两个参数是输入参数,第三个参数是输出参数,即返回值。对于Func是必须要有返回值的,所以Func至少也要有一个输出参数(可以在IDE中对Func看看重载)。紧接在format等号后面的是lambda表达式。需要特别注意的是,lambda表达式中的参数是输入参数,而且是与Func所指定的参数类型是一一对应的,也就是说count对应的是Func中的int类型,而message对应的是Func中的string类型,而lambda后在的内容(大括号内的)是具体的实现,其中的return的返回值所对应的类型是Func的最后一个参数类型,即string类型。

showMessage的参数只有输入参数,没有返回值的。这里只有一个string类型的输入参数。

在实际运用中时,对于Func和Action的类型可以灵活的定义,可以极大的简化大码,提高重用率。

转载于:https://www.cnblogs.com/pangblog/p/3246564.html

C#利用lambda在函数中创建内部函数相关推荐

  1. Delphi 如何解决在DLL的入口函数中创建或结束线程时卡死

    先看一下使用Delphi开发DLL时如何使用MAIN函数, 通常情况下并不会使用到DLL的MAIN函数,因为delphi的框架已经把Main函数隐藏起来 而工程函数的 begin  end 默认就是M ...

  2. mysql函数临时表_MySQL函数中创建临时表

    我们都知道,在MySQL创建函数的时候,是不能返回table类型的数据的. 我有几个疑问: 1.在function中我首先创建一个临时表: create temporary table table_t ...

  3. java 通常在函数内部创建对象还是在外部创建对象_java中为什么在主函数中创建外部类对象可以,创建内部类对象就失败了呢?2类不都是非静态的吗?...

    展开全部 public class OuterClass { public static void main(String[] args) { OuterClass outerClass = new  ...

  4. 利用OpenCV的函数createTrackbar创建滑动条查看二值化的最优阈值的源码及讲解

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 这个功能的实现其实很简单,主要是要明白creat ...

  5. php 变量传给另外一个函数,将在一个函数中创建的PHP变量传递给另一个

    您可以将变量设为全局变量: function add_custom_price( $cart_object ) { global $newVar; foreach ( $cart_object-> ...

  6. Main函数中的argc和argv应用举例

     尽管之前写过一篇关于argc,argv方面的文章(http://blog.csdn.net/carson2005/article/details/5766192)但依然有朋友搞不太清楚.所以,这 ...

  7. ES6/03/函数的定义方式和调用方式,函数内的this指向,改变函数中this指向的三个方法(call(),apply(),bind())

    函数的定义方式 1,自定义函数(命名函数) function fun(){}; 2,函数表达式(匿名函数) var fun =function(){}; 3,利用new Function( '参数1' ...

  8. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | dex_file.cc 中创建 DexFile 实例对象的相关函数分析 )

    文章目录 前言 一.dalvik_system_DexFile.cc#CreateDexFile 函数分析 二.dex_file.cc#DexFile::Open 函数分析 三.dex_file.cc ...

  9. c语言定义可变长度的数组,有没有办法在c中创建一个可变长度数组全局?

    我在一个函数中创建了一个可变长度数组,但是我需要在第二个函数中引用这个数组.当我将声明置于main()之上时,问题就出现了,因为它的长度尚未定义,我的编译器生气了. 人们通常如何解决这个问题? 编辑: ...

最新文章

  1. oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项
  2. 使用自动化插件release来管理maven项目的版本发布
  3. 人群计数--Single-Image Crowd Counting via Multi-Column Convolutional Neural Network
  4. 如何判断DropDownList中是否包含某个项
  5. amchart折线图示例
  6. iview 下拉select样式_Vue.js相关:iview实现select tree树形下拉框的示例代码
  7. java打印菱形代码_Java打印菱形高效简洁代码
  8. 机器学习相关的一些术语
  9. if else 的个小案例~
  10. 【集合】Vector 是线程安全的?
  11. 疯狂Java学习笔记(72)-----------大话程序猿面试
  12. log4j.xml示例_log4j.xml示例配置
  13. debian7 安装配置
  14. 2021华为软挑赛复盘
  15. 三边定位算法在OMNet++上的简单实现
  16. 新手gxf学python---文件操作之登录、注册功能
  17. 【AAAI 2021】全部接受论文列表(六)
  18. Web前端知识——JavaScript
  19. 活动桌面处理和一个例子
  20. 大数据学习完整学习路线

热门文章

  1. 超级细分插件_草图大师必装插件
  2. 上传图片被防火墙拦截_Web安全:文件上传漏洞
  3. 百度语音合成 js html,Node.js结合百度TTS接口实现文字转语音功能
  4. 2008php多版本共存,lnmp安装多版本PHP共存的方法详解
  5. ndk 不用java_使用NDK创建及配置C++程序(原生纯C++项目,不包含JAVA代码)
  6. C++ 中this指针的用途
  7. html5 微格式,HTML5抢鲜:微格式及相关的属性名称。
  8. matlab奈馈斯图,matlab关于控制的设计单位负反馈的校正
  9. 谁说C语言和C+太难?没前途?谬论!
  10. Python,OpenCV轮廓属性、轮廓检测及绘制