如何将AI能力与大数据技术结合,助力数据分析治理等工作的效率大幅提升,优化大数据引擎的性能及成本? 了解详情
写点什么

C# 9 Lambda 小幅升级

  • 2020-08-06
  • 本文字数:758 字

    阅读完需:约 2 分钟

C# 9 Lambda小幅升级

C# 9 的 Lambdas 将会有一个小的升级,包含两个新特性。这两个新特性都不会改变代码的编写方式,但都体现了开发人员的意图。


Lambda丢弃参数允许开发人员显式指定某些参数是不需要的,这样可以防止编译器对未使用的参数发出错误警告。事件处理器就可能出现这种情况,因为事件处理器有可能不需要知道发送方是谁,有不需要知道对象参数是什么。


button1.Click += (s, e) => ShowDialog(); 
复制代码


通过替换参数,很容易就知道变量未被使用。


button1.Click += (_, _) => ShowDialog(); 
复制代码


如果有必要,可以使用类型。


var handler = (object _, EventArgs _) => ShowDialog(); 
复制代码


静态匿名函数可作为无法捕捉本地变量(包括参数)的 Lambda 或匿名函数。下面这个示例来自 最初的提议


int y = 10; someMethod(x => x + y); // 捕捉 'y', 导致不必要的资源分配. 
复制代码


在 C#中,引用本地变量的匿名函数需要分配一个临时对象。本地参数会被移出方法,并移入到对象中,在当前执行的函数结束后,它将继续存在。这是必要的,因为匿名函数存在的时间可能比创建它的函数要长。


通过添加 static 关键字来表明匿名函数阻止这种内存分配。


int y = 10; someMethod(static x => x + y); // 错误! 
复制代码


为了修复这个错误,需要将变量 y 改成常量或静态字段。


const int y = 10; someMethod(static x => x + y); // 好了 :-) 
复制代码


以下是该特性的主要规则:


  • 静态匿名函数无法从包含作用域捕获到状态。因此,局部变量、参数和包含作用域内的参数在静态匿名函数中是不可用的。

  • 静态匿名函数无法通过隐式或显式 this 或 base 引用来引用实例成员。

  • 静态匿名函数可以引用包含作用域内的静态成员。

  • 静态匿名函数可以引用包含作用域内的常量定义。

  • 在静态匿名函数中的 nameof()可以引用包含作用域内的局部变量、参数,或者 this 或 base 函数。


原文链接


C# 9: Minor Improvements for Lambdas


2020-08-06 16:375321

评论 1 条评论

发布
用户头像
现在C#还能用在哪方面呢?
2020-08-07 14:34
回复
没有更多了
发现更多内容

JerryScript:物联网开发者的得力工具

华为云开发者联盟

物联网 LiteOS JerryScript 引擎 物联网应用

react源码解析11.生命周期调用顺序

buchila11

React

react源码解析12.状态更新流程

buchila11

React

C++ 开发笔记

行者孙

内容合集 签约计划第二季

流量控制-从原理到实现

高性能架构探索

架构 分布式 微服务 签约计划第二季

前端架构师修炼指南精选

杨成功

前端 架构师 内容合集 签约计划第二季

吃透负载均衡

高性能架构探索

负载均衡 架构 分布式 微服务 签约计划第二季

【TcaplusDB知识库】[Generic表]扫描数据接口说明]

tcaplus

腾讯云 TcaplusDB

面试官:useLayoutEffect和useEffect的区别

全栈潇晨

React

面试官:如何实现 List 集合去重?

王磊

java面试

带波浪效果的CollapsingToolbarLayout + RecycleView

阿策小和尚

28天写作 Android 小菜鸟 12月日更

【TcaplusDB知识库】[Generic表]根据部分Key字段值读取数据接口说明

tcaplus

Flyway让数据库版本管理更简单

恒生LIGHT云社区

数据库 sql SqlServer

【TcaplusDB知识库】读取数据示例(TDR表)

tcaplus

亿级流量实验平台设计与实现

高性能架构探索

架构 分布式 微服务 签约计划第二季 实验平台

彻底搞通服务发现的原理和实现

高性能架构探索

架构 分布式 微服务 服务发现 签约计划第二季

【TcaplusDB知识库】更新数据示例(TDR表)

tcaplus

netty系列之:小白福利!手把手教你做一个简单的代理服务器

程序那些事

Java Netty 代理 程序那些事 12月日更

【LeetCode】寻找旋转排序数组中的最小值Java题解

Albert

算法 LeetCode 12月日更

【TcaplusDB知识库】插入数据示例(TDR表)

tcaplus

数据库 腾讯云 TcaplusDB

给弟弟的信第13封|一个北京姑娘的艰辛生活

大菠萝

28天写作

阿里云田涛涛解读未来自动化运维新思路:CloudOps

阿里云弹性计算

CloudOps 云上运维

【TcaplusDB知识库】删除数据示例(TDR表)

tcaplus

实用机器学习笔记十四:多层感知机

打工人!

人工智能 机器学习 算法 学习笔记 12月日更

有了代码变更分解提交工具SmartCommit,再也不担心复合提交了

华为云开发者联盟

代码 复合提交 SmartCommit 代码提交 代码提交原子性

面试官:react中的setState是同步的还是异步的

全栈潇晨

React

Scrapy Spider中间件,你学会了吗?本篇博客有一案例

梦想橡皮擦

12月日更

lock-free在召回引擎中的实现

高性能架构探索

架构 分布式 微服务 签约计划第二季

深入理解Flutter相机插件【Flutter专题22】

坚果

flutter 28天写作 签约计划第二季 12月日更

React进阶(五):导航守卫

No Silver Bullet

React 路由 12月日更

【TcaplusDB知识库】[Generic表]读取数据接口说明

tcaplus

C# 9 Lambda小幅升级_语言 & 开发_Jonathan Allen_InfoQ精选文章