表达式体成员是一种在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类,包含两个计算属性:AreaPerimeter。其中,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中的更改(十四)——表达式体的更多相关文章

  1. 第四章 在MVC4.0中对脚本以及样式表的引用变化

    原文:http://www.cnblogs.com/xdotnet/archive/2012/07/21/aspnet40_webpage20.html 一.可以直接使用“~”,而无需使用Href对象 ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二)

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二) 代码工程地址: https:/ ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章  ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...

  4. PostgreSQL Replication之第十四章 扩展与BDR

    在这一章中,将向您介绍一个全新的技术,成为BDR.双向复制(BDR),在PostgreSQL的世界里,它绝对是一颗冉冉升起的新星.在不久的将来,许多新的东西将会被看到,并且人们可以期待一个蓬勃发展的项 ...

  5. 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记

    第十四章:呈现数据 理解输入与输出 标准文件描述符 文件描述符 缩写 描述 0 STDIN 标准输入 1 STDOUT 标准输出 2 STDERR 标准错误 1.STDIN 代表标准输入.对于终端界面 ...

  6. perl 第十四章 Perl5的包和模块

    第十四章 Perl5的包和模块 by flamephoenix 一.require函数  1.require函数和子程序库  2.用require指定Perl版本二.包  1.包的定义  2.在包间切 ...

  7. Gradle 1.12 翻译——第十四章. 教程 - 杂七杂八

    有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...

  8. C和指针 (pointers on C)——第十四章:预处理器

    第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什 ...

  9. CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章

    第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...

  10. JavaScript高级程序设计:第十四章

    第十四章 一.表单的基础知识 在HTML中,表单是由<form>元素来表示的,而在javascript中,表单对应的则是HTMLFormElement类型.HTMLFormElement继 ...

随机推荐

  1. matlab修改读取mat文件后的变量名

    代码如下: %% str1=load('CH1.mat'); val_names = fieldnames(str1); % 获取结构体后那个未知的变量名 data1 = getfield(str1, ...

  2. Mybatis中没有返回值的查询方法

    最近在项目开发中发现一件非常有意思的事情,一个Mapper.java文件中有一个查询方法没有返回值,这引起了我的好奇心, 没有返回值查询还有什么用呢? 仔细去看这个Mapper.java文件对应的xm ...

  3. stm32L4xx串口日志配置解析

    前言: st这两年推出了一款超低功耗的芯片,stm32l4xx系列,该系列芯片有着功耗低,尺寸小等特点,非常适合应用在可穿戴式设备. 团队在这一领域深耕,所以不可避免的要用到这款芯片,这里就针对该芯片 ...

  4. Mysql查询数据量大小

    --按实例 SELECT CONCAT(round(sum(DATA_LENGTH/1024/1024/1024),2),"GB") as datazise FROM inform ...

  5. GCC&&G++ C && C++ 内嵌汇编和调用汇编函数的方法(x86,ARM自己对照改)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  6. 【732. 我的日程安排表 III】线段树求解

    class MyCalendarThree { public static void main(String[] args) { MyCalendarThree myCalendarThree = n ...

  7. AES算法:加密通信的新选择

    AES算法起源: AES(Advanced Encryption Standard)算法是一种对称密钥加密算法,由比利时密码学家Joan Daemen和Vincent Rijmen设计,于2001年被 ...

  8. 记录--不定高度展开收起动画 css/js 实现

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 不定高度展开收起动画 最近在做需求的时候,遇见了元素高度展开收起的动画需求,一开始是想到了使用 transition: all .3s; ...

  9. Oracle字符串分隔函数

    记录一下 CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000); CREATE OR REPLACE FUNCTION splits ...

  10. PostgreSQL与Java JDBC数据类型对照

    序号 数据库类型 Java类型 JDBC索引 JDBC类型 1 varchar java.lang.String 12 VARCHAR 2 char java.lang.String 1 CHAR 3 ...