C# 9: Minor Improvements for Lambdas

栏目: IT技术 · 发布时间: 5年前

内容简介:Lambdas will be getting a small upgrade in C# 9 with two new features. Neither will change the way code is written, but they do clarify the developer’s intent.By replacing the parameters as shown below, it makes it clear that the variables are unused.

Lambdas will be getting a small upgrade in C# 9 with two new features. Neither will change the way code is written, but they do clarify the developer’s intent.

Lambda Discard Parameters allow developers to explicitly indicate that some of the parameters are not needed. This prevents erroneous compiler warnings about unused parameters. This can occur in places such as event handlers where one doesn’t need the sender and object parameter.

button1.Click += (s, e) => ShowDialog();

By replacing the parameters as shown below, it makes it clear that the variables are unused.

button1.Click += (_, _) => ShowDialog();

If necessary, types may be used.

var handler = (object _, EventArgs _) => ShowDialog();

The Static Anonymous Functions feature is used to indicate a lambda or anonymous function cannot capture local variables (including parameters). This next example comes from the original proposal .

int y = 10;
someMethod(x => x + y); // captures 'y', causing unintended allocation.

In C#, anonymous functions that refer to local variables require allocating a temporary object. The local parameter is then moved out of the method and into the object so it will continue to exist after the currently executing function ends. This is necessary because an anonymous function may exist longer than the function that created it.

Adding the static keyword indicates the anonymous function prevents this memory allocation.

int y = 10;
someMethod(static x => x + y); // error!

In order to fix the error, the variable y needs to be changed into a constant or static field.

const int y = 10;
someMethod(static x => x + y); // okay :-)

Below are the major rules for this feature:

  • A static anonymous function cannot capture state from the enclosing scope. As a result, locals, parameters, and this from the enclosing scope are not available within a static anonymous function.
  • A static anonymous function cannot reference instance members from an implicit or explicit this or base reference.
  • A static anonymous function may reference static members from the enclosing scope.
  • A static anonymous function may reference constant definitions from the enclosing scope.
  • nameof() in a static anonymous function may reference locals, parameters, or this or base from the enclosing scope.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

电商产品经理宝典:电商后台系统产品逻辑全解析

电商产品经理宝典:电商后台系统产品逻辑全解析

刘志远 / 电子工业出版社 / 2017-10-1 / 49.00元

时至今日,对于产品经理的要求趋向业务型、平台型,甚至产生了细分领域专家。纯粹的前端产品经理(页面、交互)逐渐失去竞争力。而当后台产品经理的视野开始从功能延伸到模块,再延伸到子系统,最后关注整体系统时,就有了把控平台型产品的能力。 《电商产品经理宝典:电商后台系统产品逻辑全解析》围绕“电商后台产品”,从电商的整体产品架构入手,逐步剖析各支撑子系统。通过学习电商产品后台的架构和逻辑,可以让读者从......一起来看看 《电商产品经理宝典:电商后台系统产品逻辑全解析》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器