C# 元组

文章目录

  • C# 元组
    • Tuple 类
    • ValueTuple 类
    • ValueTuple 与 Tuple的区别
      • `System.ValueTuple` 类型的值是可变的
      • `System.Tuple` 类型的值是不可变的
      • `System.ValueTuple` 类型的数据成员是字段
    • System.ValueTuple 与匿名类
    • 在使用Linq查询时,如何权衡使用元组还是匿名类
      • 权衡
        • 主要区别
        • 序列化

C# 元组

Tuple 类

程序集:System.Runtime.dll

提供用于创造元组对象的静态方法。

用法:

var primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19);
Console.WriteLine("Prime numbers less than 20: " + "{0}, {1}, {2}, {3}, {4}, {5}, {6}, and {7}",primes.Item1, primes.Item2, primes.Item3, primes.Item4, primes.Item5, primes.Item6,primes.Item7, primes.Rest.Item1);
// The example displays the following output:
//    Prime numbers less than 20: 2, 3, 5, 7, 11, 13, 17, and 19

ValueTuple 类

提供用于创建值元组的静态方法。

用法:

(int, string) x1 = ValueTuple.Create(24, "zs");

ValueTuple 与 Tuple的区别

System.ValueTuple 类型支持的 C# 元组不同于 System.Tuple 类型表示的元组。 主要区别如下:

  • System.ValueTuple 类型是值类型。 System.Tuple 类型是引用类型。
  • System.ValueTuple 类型的值是可变的。 System.Tuple 类型的值是不可变的。
  • System.ValueTuple 类型的数据成员是字段。 System.Tuple 类型的数据成员是属性。

System.ValueTuple 类型的值是可变的

什么是可变的呢,其实就是可以get和set,举例说明,下面这段代码是不会出现错误提示的

            var person = (  24,  "张三");person.Item1 = 3;

System.Tuple 类型的值是不可变的

这个类型的属性是只读的(get),举例说明

在这里插入图片描述

System.ValueTuple 类型的数据成员是字段

数据字段就是可以给字段取一个名字,而System.Tuple 只能用Item1,Item2这样的方式进行获取

举例

            var person = (age: 24, name: "张三");person.age = 3;

System.ValueTuple 与匿名类

搞c#的都知道匿名类,比如 var x = new {Name="张三",Age=24}这样一段代码就是new了一个匿名对象

对比匿名类和元组的区别

  • 语法区别,元组使用的是小括号,匿名类使用的是花括号
  • 关键字区别,元组不需要使用关键字new,匿名类需要使用关键字new
  • 类型区别,元组(特指ValueTuple)是值类型,匿名类(对象)是引用类型

在使用Linq查询时,如何权衡使用元组还是匿名类

权衡

你可能希望始终使用 ValueTuple(而不是 Tuple)和匿名类型,但应进行一些权衡考虑。 ValueTuple 类型是可变的,而 Tuple 是只读的。 匿名类型可用于表达式树,而元组不行。 下表概述了一些关键区别。

主要区别

“属性”访问修饰符类型自定义成员名称析构支持表达式树支持
匿名类型internalclass✔️✔️
Tuplepublicclass✔️
ValueTuplepublicstruct✔️✔️

序列化

选择类型时的一个重要考量是,是否需要对其进行序列化。 序列化是将对象状态转换为可保持或传输的形式的过程。 有关详细信息,请参阅序列化。 当序列化非常重要时,创建 classstruct 优于使用匿名类型或元组类型。

https://learn.microsoft.com/zh-cn/dotnet/standard/base-types/choosing-between-anonymous-and-tuple

https://learn.microsoft.com/zh-cn/dotnet/api/system.valuetuple?view=net-7.0

https://learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/builtin-types/value-tuples#tuples-vs-systemtuple

https://learn.microsoft.com/zh-cn/dotnet/api/system.tuple?view=net-7.0#code-try-1

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

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

相关文章

奇点云DataSimba R4.9 LTS发布:稳定性加固,架构升级,142项功能上新

不久前,奇点云的数据云全系产品如期发布新一季商业化版本更新: 数据云平台DataSimba:R4.9 LTS版发布,稳定性全面加固,功能上新;自R4系列起架构升级,封装底层复杂性,支撑上层快速构建…

CSS圆角进化论

CSS圆角发展过程 大致经历了3个阶段,包括: 背景图片实现圆角CSS2.0标签模拟圆角CSS3.0圆角属性(border-radius属性)实现圆角 ☛背景图片实现圆角:使用背景图片实现圆角的方式很多,实现的方式和圆角的切图方式关系密…

Nacos服务注册成功,RestTemplate调用服务提供者时空指针异常(已解决)

发现问题并进行记录 目录 项目场景:问题描述原因分析解决 项目场景: RestTemplate也可以做服务调用(进行测试) 目的:解决该问题,不考虑其他远程调用方式(Fegin,Dubbo) 项目Pom文件 Spring Boot ----2.6.3 Spring Cloud------2021.0.1 Spring Cloud Al…

vue动态修改浏览器标题和logo

问题描述 需要将一个系统,更改一下标题、logo,然后部署成另一个系统,由于不想单独拉出一套代码(单独拉出来后维护成本增加),所以想要动态改变系统标题和图标 解决方案 将项目制造一个入口可以修改项目的…

Unity | HDRP高清渲染管线学习笔记:Rendering Debugger窗口

HDRP给我们提供了一套完整的可视化Debug工具,集成在Rendering Debugger窗口。通过顶部菜单Window→Analysis→Rendering Debugger可以打开窗口。Rendering Debugger窗口不仅仅可以在编辑模式下使用,也可以在真机上运行时使用。(要在真机上运行…

Numpy学习(参考)

目录 一、前言 二、numpy官方文档 文档划分 参数规范 相关知识明知 Routines学习(部分) 1、创建 2、数组操作常用 ufunc 三、numpy基本操作 开篇探索 数据类型 创建数组 创建数组有5种常规机制 常用创建方法 拷贝创建 数组运算 形状操作 查看形状 形状变换 …

linux中安装Nginx的具体步骤

1.首先介绍一下Ngnix nginx是一款使用c语言编写的高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现得最好,中国大陆使用Nginx网站用户有:百度、京东、…

自定义 MVC 框架思想

目录 一、MVC设计模式 1. 什么是MVC 2. 三层架构与MVC的区别 二、自定义MVC框架 1. 为什么要学习自定义MVC框架 2. 自定义MVC的工作原理 3. 自定义MVC框架的优势 三、自定义MVC实例流程 1. mvc三层架构的弊端 2. 自定义MVC的工作流程 2.1 子控制器(…

《Redis 核心技术与实战》课程学习笔记(一)

基本架构:一个键值数据库包含什么? 这样学 Redis,才能技高一筹 为了保证数据的可靠性,Redis 需要在磁盘上读写 AOF 和 RDB,但在高并发场景里,这就会直接带来两个新问题: 一个是写 AOF 和 RDB …

第十二章线程池

文章目录 享元模式手写数据库连接池 为什么需要线程池自定义线程池自定义拒绝策略接口自定义任务队列自定义线程池 JDK中的线程池常用的线程池的类和接口的之间的关系线程池状态构造方法线程池的工作流程拒绝策略 ExecuctorsnewFixedThreadPoolnewCachedThreadPoolnewSingleThr…

django celery简单 例子

django celery简单 例子 https://docs.celeryq.dev/en/latest/django/first-steps-with-django.html pip list pip install Django4.2.3 pip install redis4.6.0 pip install celery5.3.1 pip install SQLAlchemy2.0.17 source demo1_venv/bin/activate django-admin start…