.NET 6新特性试用 | record struct

前言

在以前的文章中,我们介绍过record类型,它具有不变性(《为什么应该用record来定义DTO》)和值相等性(《为什么应该用record来定义DTO(续)》)。

record是引用类型。而在.NET 6中,我们可以使用record struct定义值类型。

Demo

1.不变性

定义record structure的代码非常简单,如下所示:

public record struct User(int Id, string Name);

但是,需要注意的是,和record不一样,record struct生成的类型是不具备不变性的:

4b09280bae1e87889cf3fe29a102ce12.png

通过反编译可以看到,最后生成的其实就是结构(struct)类型,而且每个属性都有set方法:

e1c043ebfb2b938114a7c7919387024c.png

如果要让类型具有不变性,需要在定义时设置readonly关键字:

public readonly record struct User(int Id, string Name);

0e753d713c0621f37831f0c0298ef397.png

record一样,同样可以用with表达式修改指定属性创建对象的副本:

5f441dec2b5248362bd7dedbad190a37.png

2.值相等性

因为record struct实际是一个结构类型,而结构是一种值类型,所以可以使用Equals方法进行值比较,具有有相同值的两个结构将返回true:

public struct User
{public int Id;public string Name;
}

854187edc409d02b748d09cd4fe50072.png

但是,普通的结构没有实现==和!=运算符,所以不能用这些运算符比较两个结构。但是,可以在record struct上使用这些运算符进行比较:

454c725a4a81ff6d21bb4c0868ba1c5c.png

结论

为了便于区分,可以分别用record classrecord struct进行定义:

public record class UserClass(int Id, string Name);
public record struct UserStruct(int Id, string Name);

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原来我们看到的世界地图竟这样震撼!多年的地理白学了...

▲ 点击查看几乎每个家庭都会有两张地图:一张世界地图,一张中国地图。薄薄的两张纸,蕴藏着让每个人学会“看世界”的磅礴力量。哈佛上一任校长,也是300多年来唯一一位女校长德鲁吉尔平福斯特(Drew Gilpin Faust&#x…

Exchange Powershell查看用户最后登陆邮箱时间

在Exchange日常管理中,我们可能经常会遇到这样的问题,就是怎么来知道一个用户最后的登录时间?这个问题在使用Exchange powershell就能很好的解决了。 用管理员身份运行Exchange management powershell 查看某一个邮箱数据库的统计信息&#x…

在n个火柴里面拿3根出来拼接成最大三角形的周长

求三角形max周长 public class 求三角形max周长 { public static void main(String[] args) {/*** 有n个棍子 每个棍子的长度是a[i]* 3<n<100;* 1<a[i]<100; */ System.out.println("请输入n根绳子"); Scanner input new Scanner(System.in); int ni…

mysql之mysqldump命令

导出要用到MySQL的mysqldump工具&#xff0c;基本用法是&#xff1a; shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表&#xff0c;整个数据库将被导出。 通过执行mysqldump --help&#xff0c;你能得到你mysqldump的版本支持的选项表。 注意&#xff0c;…

易企秀制作的步骤

2019独角兽企业重金招聘Python工程师标准>>> 1、选图很关键 &#xff08;图片干净 整洁&#xff0c;不同方位展示 &#xff0c;符合主题&#xff09;。 2、配上说明性文字 简明扼要 3、选择合适的模板和背景音乐。 4、及时沟通与调整。 转载于:https://my.oschina.n…

java instanceof运算符_Java instanceof 运算符的使用方法

用法&#xff1a;(类型变量 instanceof 类|接口)作用&#xff1a;instanceof 操作符用于判断前面的对象是否是后面的类&#xff0c;或者其子类、实现类的实例。如果是则返回true 否则就返回false。注意&#xff1a; instanceof前面的操作数的编译时类型要么与后面的类相同&…

C# WPF MVVM模式Prism框架下事件发布与订阅

01—前言处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信&#xff0c;Prism提供了一种事件机制&#xff0c;可以在应用程序中低耦合的模块之间进行通信&#xff0c;该机制基于事件聚合器服务&#xff0c;允许发布者和订阅者之间通过事件进行通讯&#xff0c;且彼此之…

这几部高分学科纪录片,助力孩子涨姿势拓视野~

全世界只有3.14 % 的人关注了爆炸吧知识▌导读本文为同学们整理了几部高分经典学科纪录片&#xff0c;对应文学、数学、经济学、地理、化学。这不仅是课堂学习的补充与延伸&#xff0c;更是开拓视野、激发学习内驱力的绝佳利器。建议收藏&#xff01;&#xff08;关注视频号少年…

Linux 学习_在Linux下面安装tomcat

要在linux下面安装tomcat&#xff0c;首先我们需要做一些准备工作.... 下载tomcat&#xff1a; 下载地址&#xff1a;http://tomcat.apache.org/download-60.cgi 下载&#xff1a;tar.gz 如图&#xff1a; 说明&#xff1a; WinISO安装版&#xff1a;下载地址&#xff1a;http…

Codeforces 474C Captain Marmot 给定4个点和各自旋转中心 问旋转成正方形的次数

题目链接&#xff1a;点击打开链接 题意&#xff1a; 给定T表示case数 以下4行是一个case 每行2个点&#xff0c;u v 每次u能够绕着v逆时针转90 问最少操作多少次使得4个u构成一个正方形。 思路&#xff1a; 枚举判可行 #include <iostream> #include <cmath> #inc…

穷竭搜索

/**穷竭搜索是将所有的可能性罗列出来&#xff0c;在其中找到答案的方法&#xff0c;这里我们主要介绍深度优先搜索和广度优先搜索* author Think**/ public class 穷竭搜索 {public static void main(String[] args) {}//计算阶层 n&#xff01;n*(n-1)&#xff01;public sta…

JQUERY插件学习之jQuery UI

jQuery UI:http://jqueryui.com/ jQuery UI介绍: jQuery UI 是以 jQuery 为基础的开源 JavaScript 网页用户界面代码库。包含底层用户交互、动画、特效和可更换主题的可视控件。我们可以直接用它来构建具有很好交互性的web应用程序。所有插件测试能兼容 IE 6.0, Firefox 3, Saf…

java 数组拼接字符串_如何在java里java字符串数组合并成一个数组?

展开全部java里java字符串数组合并成一个数组方法如下&#xff1a;//方法一 Arrays类String[] a {"A","B","C"};String[] b {"D","E"};// List list Arrays.asList(a); --OK// List list Arrays.asList("A",…

如何通过 C# 判断某个 IP 是否属于某IP段?

咨询区 Ricky&#xff1a;如果判断某一个IP (172.16.11.50) 是否落在某一个 IP 段内&#xff1f;比如这样的段&#xff1a;172.16.11.5 - 100&#xff0c;另外不知道 C# 中是否有现成的轮子可以做这件事 ?回答区 BuddhiP&#xff1a;可以考虑使用 jsakamoto 大佬写的工具包&am…

百度2012校招笔试题之全排列与组合

算法题目&#xff1a; 求一个全排列函数&#xff1a; 如p([1,2,3])输出&#xff1a;[123],[132],[213],[231],[321],[323]. 思路&#xff1a;采用字典序的排序的方法 代码实现&#xff1a; void swap(char *a,char *b) {char temp;temp*a;*a*b;*btemp; }void reverse(char *di…

欧洲的小国家究竟有多袖珍?

全世界只有3.14 % 的人关注了爆炸吧知识你走遍祖国的每个角落了吗&#xff1f;相信绝大多数人的回答是“NO”但是如果你生活在很小的国家里&#xff0c;也许一根烟&#xff0c;或者一顿午餐的时间&#xff0c;你就可以从这个国家的一端走到另一端。下面就一起看看世界上最小的国…

蚂蚁算法

public class 蚂蚁算法 { /** * 有n个蚂蚁每秒速度在Lcm的杆子上爬行,蚂蚁到杆子端点就会掉下去,蚂蚁相遇,交错通过,只能各自反方向爬回去, * 对于每只蚂蚁我们知道它离杆子左端的距离是Xi,但是不知道它当时的朝向,请计算所有蚂蚁落下杆子所需要的最短时间和 * 最长时间 …

php 输出缓冲区清理

bool ob_end_flush ( void )这个函数将送出最顶层缓冲区的内容&#xff08;如果里边有内容的话&#xff09;&#xff0c;并关闭缓冲区。如果想进一步处理缓冲区中的内容&#xff0c;必须在 ob_end_flush()之前调用 ob_get_contents()&#xff0c;因为在调用 ob_end_flush()后缓…

企业文化和价值观

看标题&#xff0c;是个很大的范围&#xff0c;不过&#xff0c;在这里不打算详细展开的来说&#xff0c;简单说说吧。 价值观&#xff1a;客戶第一&#xff0c;協作&#xff0c;高效 A.客戶第一&#xff0c;客戶的利益優先&#xff0c;原因无需多解釋&#xff0c;没有客户&…

java ftp 判断目录存在_java判断ftp目录是否存在的方法

本文为大家分享了java判断ftp目录是否存在的方法&#xff0c;供大家参考&#xff0c;具体内容如下package com.soft4j.log4j;import java.io.IOException;import sun.net.ftp.FtpClient;public class FtpTest{static String middle_ftpServer "10.103.2.250";static…