《C# in depth》第6章C#6.0中的更改(十四)——表达式体
表达式体成员是一种在C# 6及以上版本中引入的语法。它允许开发人员使用Lambda表达式来简化方法或属性的定义。
在使用表达式体成员时,可以将方法或属性的实现写在一个Lambda表达式中,然后直接返回其计算结果。例如,下面是一个使用表达式体成员定义的简单属性:
public class Person
{
private string name;
public string Name
{
get => name;
set => name = value ?? throw new ArgumentNullException(nameof(value));
}
}
在这个例子中,Name属性的get和set方法都被重写为Lambda表达式。get => name表示当获取属性值时,直接返回name字段;set => name = value ?? throw new ArgumentNullException(nameof(value))表示当设置属性值时,先判断传入的值是否为空,如果为空则抛出一个异常,否则将值赋给name字段。
需要注意的是,表达式体成员只适用于简单的、可以在一行代码中完成的方法或属性。如果方法或属性的实现过于复杂,则应该使用传统的代码块形式来定义。
表达式体的经典应用场景是简化属性的定义。下面是一个代码示例,展示如何使用表达式体成员来简化C#属性的定义:
public class Circle
{
private double radius;
// Traditional property definition
public double Area
{
get
{
return Math.PI * radius * radius;
}
}
// Property definition using expression-bodied member syntax
public double Perimeter => 2 * Math.PI * radius;
}
在这个例子中,我们定义了一个Circle类,包含两个计算属性:Area和Perimeter。其中,Area属性使用传统的方法定义方式,而Perimeter属性则使用表达式体成员。通过使用表达式体成员,可以将属性的定义简化为一行代码。
需要注意的是,表达式体还可用于简化方法的定义,例如:
public class Calculator
{
public int Add(int a, int b) => a + b;
public bool IsPrime(int n)
{
if (n < 2) return false;
for (int i = 2; i <= Math.Sqrt(n); i++)
{
if (n % i == 0) return false;
}
return true;
}
}
在上面的示例中,Add方法和IsPrime方法都使用了表达式体的语法来简化方法的定义。
《C# in depth》第6章C#6.0中的更改(十四)——表达式体的更多相关文章
- 第四章 在MVC4.0中对脚本以及样式表的引用变化
原文:http://www.cnblogs.com/xdotnet/archive/2012/07/21/aspnet40_webpage20.html 一.可以直接使用“~”,而无需使用Href对象 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二) 代码工程地址: https:/ ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
- PostgreSQL Replication之第十四章 扩展与BDR
在这一章中,将向您介绍一个全新的技术,成为BDR.双向复制(BDR),在PostgreSQL的世界里,它绝对是一颗冉冉升起的新星.在不久的将来,许多新的东西将会被看到,并且人们可以期待一个蓬勃发展的项 ...
- 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记
第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...
- perl 第十四章 Perl5的包和模块
第十四章 Perl5的包和模块 by flamephoenix 一.require函数 1.require函数和子程序库 2.用require指定Perl版本二.包 1.包的定义 2.在包间切 ...
- Gradle 1.12 翻译——第十四章. 教程 - 杂七杂八
有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...
- C和指针 (pointers on C)——第十四章:预处理器
第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什 ...
- CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章
第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...
- JavaScript高级程序设计:第十四章
第十四章 一.表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在javascript中,表单对应的则是HTMLFormElement类型.HTMLFormElement继 ...
随机推荐
- 多线程系列(十八) -AQS原理浅析
一.摘要 在之前的文章中,我们介绍了 ReentrantLock.ReadWriteLock.CountDownLatch.CyclicBarrier.Semaphore.ThreadPoolExec ...
- centos 定时任务
想法 看见一个别的项目,每天扒bing的背景,然后 生成个列表,然后数据就一天天的增加,创意非常好 有时间研究下 关键字 centos 定时任务 基于centos7系统定时任务创建 https://b ...
- vscode 点左下角 切换分支 不显示远程分支 git
查看当前分支 git branch -vv 查看所有分支 包含远程分支 git branch -a 放弃merge // 这个很重要 git merge --abort 暂存 git stash 拉取 ...
- FastWiki v0.1.0发布!新增超多功能
FastWiki 发布 v0.1.0 https://github.com/239573049/fast-wiki/releases/tag/v0.1.0 更新日志 兼容OpenAI接口格式 删除Bl ...
- linux 系统目录详解
tmpfs 的优势: 1,动态文件系统的大小. 2,tmpfs 的另一个主要的好处是它闪电般的速度.因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的. 3,tmpfs 数 ...
- git 修改大小写远程分支失败
先说原因: windows大小写不敏感导致 最近由于项目需求,改回了windows开发环境,之前一直是 mac 开发环境,结果在windows环境下使用 git 时, 把某个之前大写的文件夹名称改 ...
- day10-中文乱码处理
中文乱码处理 1.问题抛出 当表单提交的数据为中文时,会出现乱码: (1)Monster.java: package com.li.web.datavalid.entity; import org.h ...
- 检验实时3D像素流送平台好坏的七个标准!(下)
上篇文章我们介绍了<检验实时3D像素流送平台质量的七个标准>中的前四个标准,本文我们将继续给您介绍检验像素流送平台质量的其他三个标准. 您的平台是通过云还是仅通过渲染的图像传输数据? 您的 ...
- linux介绍、安装、shell
1-Linux发展介绍 零 什么是Linux Linux:和我们常见的Windows一样,都是操作系统,但不同的是: Windows: 收费,不开源,主要用于日常办公.游戏.娱乐多一些. Linux: ...
- django(ORM)
一 单表(增.删.改.查) 1 测试脚本 ''' 只想测试django中的某一个py文件内容,那么可以不用书写前后端交互的形式 而是直接写一个测试脚本即可 ''' # 脚本代码无论是写在应用下的tes ...