当前位置: 首页 > news >正文

C#语言中 (元,组) 的发展史

C# 中的元组(Tuple)详解

元组(Tuple)是 C# 中的一种数据结构,用于将多个不同类型的值组合成一个复合值。元组在 C# 7.0 中得到了重大改进,提供了更简洁的语法和更好的性能。

1. 元组的基本概念

元组允许你将多个值组合成一个单一对象,而不需要创建专门的类或结构体。这在以下场景特别有用:

  • 从方法返回多个值
  • 临时组合相关数据
  • 避免创建仅用于数据传递的小型类

2. C# 7.0 之前的老式元组

在 C# 7.0 之前,使用 System.Tuple 类:

 

csharp

// 创建元组
Tuple<int, string, bool> oldTuple = Tuple.Create(1, "hello", true);// 访问元素
int number = oldTuple.Item1;
string text = oldTuple.Item2;
bool flag = oldTuple.Item3;

缺点:

  • 元素只能通过 Item1, Item2 等访问
  • 最多支持8个元素(可通过嵌套实现更多)
  • 语法冗长

3. C# 7.0 引入的新元组

C# 7.0 引入了新的值元组(ValueTuple),语法更简洁:

基本用法

 

csharp

复制

// 创建元组
var tuple = (1, "hello", true);// 访问元素
int number = tuple.Item1;
string text = tuple.Item2;
bool flag = tuple.Item3;

命名元组元素

 

csharp

复制

// 创建命名元组
var namedTuple = (Id: 1, Message: "hello", IsActive: true);// 访问命名元素
int id = namedTuple.Id;
string msg = namedTuple.Message;
bool active = namedTuple.IsActive;

解构元组

 

csharp

复制

// 解构赋值
var (id, message, isActive) = namedTuple;// 忽略某些元素
var (_, msg, _) = namedTuple;

4. 元组作为方法返回值

 

csharp

复制

// 返回元组的方法
public (int Id, string Name) GetUserInfo()
{return (1, "John Doe");
}// 使用方法
var user = GetUserInfo();
Console.WriteLine($"ID: {user.Id}, Name: {user.Name}");// 直接解构
var (userId, userName) = GetUserInfo();

5. 元组比较

C# 7.3 开始,元组支持 == 和 != 运算符:

 

csharp

复制

var tuple1 = (1, "a");
var tuple2 = (1, "a");if (tuple1 == tuple2)
{Console.WriteLine("元组相等");
}

6. 元组与匿名类型对比

特性元组匿名类型
可变性可变不可变
命名可命名元素必须命名属性
返回值可作为方法返回值不能作为方法返回值
作用域可在方法间传递仅限于定义的方法内

7. 实际应用示例

交换变量值

 

csharp

复制

int a = 5, b = 10;
(a, b) = (b, a); // 交换值

多返回值

 

csharp

复制

public (double min, double max, double average) AnalyzeData(double[] values)
{return (values.Min(), values.Max(), values.Average());
}// 使用
var data = new double[] { 1.2, 3.4, 5.6 };
var stats = AnalyzeData(data);
Console.WriteLine($"Min: {stats.min}, Max: {stats.max}, Avg: {stats.average}");

8. 性能考虑

  • ValueTuple 是值类型,分配在栈上,性能优于引用类型的 Tuple
  • 对于频繁创建和销毁的小型数据结构,ValueTuple 更高效
  • 大型或复杂数据结构仍应考虑使用类或结构体

9. 限制

  • 元组不适合作为长期存储的数据结构
  • 对于复杂业务对象,仍应使用专门的类
  • 元组元素过多会降低代码可读性(建议不超过5个元素)

元组是 C# 中一个非常有用的特性,特别适合临时组合数据和简化多值返回的场景。

相关文章:

C#语言中 (元,组) 的发展史

C# 中的元组&#xff08;Tuple&#xff09;详解 元组(Tuple)是 C# 中的一种数据结构&#xff0c;用于将多个不同类型的值组合成一个复合值。元组在 C# 7.0 中得到了重大改进&#xff0c;提供了更简洁的语法和更好的性能。 1. 元组的基本概念 元组允许你将多个值组合成一个单…...

Apollo学习——planning模块(3)之planning_base

planning_component、planning_base、on_lane_planning 和 navi_planning 的关系 1. 模块关系总览 继承层次 PlanningComponent&#xff1a;Cyber RT 框架中的 入口组件&#xff0c;负责调度规划模块的输入输出和管理生命周期。PlanningBase&#xff1a;规划算法的 抽象基类&…...

【SPIN】PROMELA语言编程入门基础语法(SPIN学习系列--1)

PROMELA&#xff08;Protocol Meta Language&#xff09;是一种用于描述和验证并发系统的形式化建模语言&#xff0c;主要与SPIN&#xff08;Simple Promela Interpreter&#xff09;模型检查器配合使用。本教程将基于JSPIN&#xff08;SPIN的Java图形化版本&#xff09;&#…...

Linux --systemctl损坏

systemctlSegmentation fault (core dumped) 提示这个 Ubuntu/Debian sudo apt-get update sudo apt-get --reinstall install systemdCentOS/RHEL sudo yum reinstall systemd # 或 CentOS 8 / RHEL 8 sudo dnf reinstall systemd...

Vue3+ElementPlus 开箱即用后台管理系统,支持白天黑夜主题切换,通用管理组件,

Vue3ElementPlus后台管理系统&#xff0c;支持白天黑夜主题切换&#xff0c;专为教育管理场景设计。主要功能包括用户管理&#xff08;管理员、教师、学生&#xff09;、课件资源管理&#xff08;课件列表、下载中心&#xff09;和数据统计&#xff08;使用情况、教学效率等&am…...

Seata源码—3.全局事务注解扫描器的初始化二

大纲 1.全局事务注解扫描器继承的父类与实现的接口 2.全局事务注解扫描器的核心变量 3.Spring容器初始化后初始化Seata客户端的源码 4.TM全局事务管理器客户端初始化的源码 5.TM组件的Netty网络通信客户端初始化源码 6.Seata框架的SPI动态扩展机制源码 7.向Seata客户端注…...

Android Coli 3 ImageView load two suit Bitmap thumb and formal,Kotlin(七)

Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;七&#xff09; 在 Android Coli 3 ImageView load two suit Bitmap thumb and formal&#xff0c;Kotlin&#xff08;六&#xff09;-CSDN博客 的基础上改进&#xff0c;主要是…...

快速搭建一个electron-vite项目

1. 初始化项目 在命令行中运行以下命令 npm create quick-start/electronlatest也可以通过附加命令行选项直接指定项目名称和你想要使用的模版。例如&#xff0c;要构建一个 Electron Vue 项目&#xff0c;运行: # npm 7&#xff0c;需要添加额外的 --&#xff1a; npm cre…...

Python网络请求利器:urllib库深度解析

一、urllib库概述 urllib是Python内置的HTTP请求库&#xff0c;无需额外安装即可使用。它由四个核心模块构成&#xff1a; ​​urllib.request​​&#xff1a;发起HTTP请求的核心模块​​urllib.error​​&#xff1a;处理请求异常&#xff08;如404、超时等&#xff09;​​…...

2025认证杯第二阶段数学建模B题:谣言在社交网络上的传播思路+模型+代码

2025认证杯数学建模第二阶段思路模型代码&#xff0c;详细内容见文末名片 一、引言 在当今数字化时代&#xff0c;社交网络已然成为人们生活中不可或缺的一部分。信息在社交网络上的传播速度犹如闪电&#xff0c;瞬间就能触及大量用户。然而&#xff0c;这也为谣言的滋生和扩…...

IP地址、端口、TCP介绍、socket介绍、程序中socket管理

1、IP地址&#xff1a;IP 地址就是 标识网络中设备的一个地址&#xff0c;好比现实生活中的家庭地址。IP 地址的作用是 标识网络中唯一的一台设备的&#xff0c;也就是说通过IP地址能够找到网络中某台设备。 2、端口&#xff1a;代表不同的进程,如下图&#xff1a; 3、socket:…...

leetcode0621. 任务调度器-medium

1 题目&#xff1a;任务调度器 官方标定难度&#xff1a;中 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表&#xff0c;用字母 A 到 Z 表示&#xff0c;以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成&#xff0c;但有一个限制…...

中小型培训机构都用什么教务管理系统?

在教育培训行业快速发展的今天&#xff0c;中小型培训机构面临着学员管理复杂、课程体系多样化、教学效果难以量化等挑战。一个高效的教务管理系统已成为机构运营的核心支撑。本文将深入分析当前市场上适用于中小型培训机构的教务管理系统&#xff0c;重点介绍爱耕云这一专业解…...

centos7 基于yolov10的推理程序环境搭建

这篇文章的前提是系统显卡驱动已经安装 安装步骤参照前一篇文章centos7安装NVIDIA显卡 安装Anaconda 下载地址anaconda.com 需要注册账号获取下载地址 wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh赋予权限 chmod ax Anaconda3-2024.10-1-…...

Web GIS可视化地图框架Leaflet、OpenLayers、Mapbox、Cesium、ArcGis for JavaScript

Mapbox、OpenLayers、Leaflet、ArcGIS for JavaScript和Cesium是五种常用的Web GIS地图框架&#xff0c;它们各有优缺点&#xff0c;适用于不同的场景。还有常见的3d库和高德地图、百度地图。 1. Mapbox 官网Mapbox Gl JS案列&#xff1a;https://docs.mapbox.com/mapbox-gl-…...

Kafka如何实现高性能

Kafka如何实现高性能 Kafka之所以能成为高性能消息系统的标杆&#xff0c;是通过多层次的架构设计和优化实现的。 一、存储层优化 1. 顺序I/O设计 日志结构存储&#xff1a;所有消息追加写入&#xff0c;避免磁盘随机写分段日志&#xff1a;将日志分为多个Segment文件&…...

如何通过partclone克隆Ubuntu 22系统

如何通过partclone克隆Ubuntu 22系统 一. 背景知识&#xff1a;为什么要克隆系统&#xff1f;二. 准备工作详解2.1 选择工具&#xff1a;为什么是partclone&#xff1f;2.2 制作定制化ISO的深层原因 三. 详细操作步骤3.1 环境准备阶段3.2 ISO改造关键步骤3.3 启动到Live环境3.4…...

语义化路径是什么意思,举例说明

下面的java代码输出结果是/a/b/../c/./a.txt/a/c/a.txt&#xff0c;语义化路径是什么意思呢&#xff1f;代码如下所示&#xff1a; import org.springframework.util.StringUtils; public class StringUtilsTest { /** 字符串处理 */ Test public void …...

Dockerfile构建镜像

Dockerfile 构建镜像 # 使用本地已下载的 java:8-alpine 镜像作为基础镜像 FROM java:8-alpine# 设置工作目录 WORKDIR /home/www/shop# 复制 JAR 文件到容器中 COPY ./fkshop-build.jar /home/www/shop/fkshop-build.jar# 复制配置文件&#xff08;如果需要&#xff09; COPY…...

vue3.0的name属性插件——vite-plugin-vue-setup-extend

安装 这个由于是在开发环境下的一个插件 帮助我们支持name属性 所以需要是-D npm i vite-plugin-vue-setup-extend -D在pasckjson中无法注释每个插件的用处 可以在vscode中下载一个JsonComments这样可以在json中添加注释方便日后维护和查阅API 引入 在vite.config.js中 im…...

gRPC为什么高性能

gRPC 之所以具备高性能的特性,主要得益于其底层设计中的多项关键技术优化。以下从协议、序列化、传输机制、并发模型等方面详细解析其高性能的原因: 1. 基于 HTTP/2 协议的核心优势 HTTP/2 是 gRPC 的传输基础,相较于 HTTP/1.x,它通过以下机制显著提升了效率: 多路复用(…...

进度管理高分论文

2022年&#xff0c;xx县开展紧密型县域医共体建设&#xff0c;将全县县、镇两级医疗机构组建成2家医共体&#xff0c;要求医共体内部实行行政、人员、财务、业务、信息、绩效、药械“七统一”管理。但是卫生系统整体信息化水平较低&#xff0c;业务系统互不相通&#xff0c;运营…...

每日算法刷题计划Day7 5.15:leetcode滑动窗口4道题,用时1h

一.定长滑动窗口 【套路】教你解决定长滑窗&#xff01;适用于所有定长滑窗题目&#xff01; 模版套路 1.题目描述 1.计算所有长度恰好为 k 的子串中&#xff0c;最多可以包含多少个元音字母 2.找出平均数最大且 长度为 k 的连续子数组&#xff0c;并输出该最大平均数。 3.…...

C++核心编程--1 内存分区模型

C程序执行时&#xff0c;内存可以划分为4部分 代码区&#xff1a;存放函数体的二进制代码 全局区&#xff1a;存放全局变量、静态变量、常量 栈区&#xff1a;局部变量、函数参数值&#xff0c;编译器自动分配和释放 堆区&#xff1a;程序员自己分配和释放 1.1 程序运行前…...

产品更新丨谷云科技 iPaaS 集成平台 V7.5 版本发布

五月&#xff0c;谷云科技 iPaaS 集成平台保持月度更新&#xff0c; V7.5 版本于近日正式发布。我们一起来看看新版本有哪些升级和优化。 核心新增功能&#xff1a;深化API治理&#xff0c;释放连接价值 API网关&#xff1a;全链路可控&#xff0c;精准管控业务状态 业务状态…...

【AI论文】对抗性后期训练快速文本到音频生成

摘要&#xff1a;文本到音频系统虽然性能不断提高&#xff0c;但在推理时速度很慢&#xff0c;因此对于许多创意应用来说&#xff0c;它们的延迟是不切实际的。 我们提出了对抗相对对比&#xff08;ARC&#xff09;后训练&#xff0c;这是第一个不基于蒸馏的扩散/流模型的对抗加…...

欧拉计划 Project Euler 73(分数有范围计数)题解

欧拉计划 Project Euler 73 题解 题干分数有范围计数 思路code 题干 分数有范围计数 考虑形如 n d \frac{n}{d} dn​的分数&#xff0c;其中 n n n和 d d d均为正整数。如果 n < d n<d n<d且其最大公约数为1&#xff0c;则称该分数为最简真分数。 将所有 d ≤ 8 d\l…...

Quic如何实现udp可靠传输

QUIC&#xff08;Quick UDP Internet Connections&#xff09;是由 Google 设计并被 IETF 标准化的传输层协议&#xff0c;它基于 UDP 实现&#xff0c;但提供了类似 TCP 的可靠性和更高级的功能&#xff08;如多路复用、0-RTT 握手、TLS 加密等&#xff09;。 尽管 UDP 是不可…...

本地文件操作 MCP (多通道处理) 使用案例

## 概述 文件操作 MCP (Multi-Channel Processing) 是一种用于高效处理本地文件的框架和库&#xff0c;它提供了并行处理、批量操作、监控和异常处理等功能。通过多通道架构&#xff0c;MCP 能够显著提高大规模文件操作的效率&#xff0c;特别适用于需要处理大量文件或大型文件…...

Blender 入门教程(三):骨骼绑定

一、前言 不知道大家有没有玩过一些单机游戏的 Mod&#xff0c;比如《侠盗猎车》里主角变成奥特曼&#xff0c;各种新能源汽车乱入等等。 这些都是别人对原有模型就行修改换皮&#xff0c;并重新绑定骨骼完成的&#xff0c;所以如果会了骨骼绑定后&#xff0c;你也就可以自己…...

Java 异常处理之 BufferOverflowException(BufferOverflowException 概述、常见发生场景、避免策略)

一、BufferOverflowException 概述 BufferOverflowException 是 Java NIO 包中的一个运行时异常&#xff0c;是 RuntimeException 的子类 public class BufferOverflowException extends RuntimeException {... }# 继承关系java.lang.Object-> java.lang.Throwable-> j…...

密码学实验:凯撒密码

密码学实验&#xff1a;凯撒密码 一、实验目的 掌握凯撒密码的数学原理&#xff1a;理解字符移位与模运算的结合&#xff0c;实现加解密算法。理解暴力破解本质&#xff1a;通过穷举有限密钥空间&#xff0c;掌握利用语言特征破解密文的方法。编程实践&#xff1a;用Python实…...

C40-指针

一 指针的引入 什么是指针:指针是一个变量&#xff0c;其值是另一个变量的内存地址 简单的使用地址输出一个变量: 代码示例 #include <stdio.h> int main() {int a10;printf("a的地址是:%p\n",&a);printf("a%d\n",*(&a)); //*号是取值运算符…...

Cloudflare防火墙拦截谷歌爬虫|导致收录失败怎么解决?

许多站长发现网站突然从谷歌搜索结果中“消失”&#xff0c;背后很可能是Cloudflare防火墙误拦截了谷歌爬虫&#xff08;Googlebot&#xff09;&#xff0c;导致搜索引擎无法正常抓取页面。 由于Cloudflare默认的防护规则较为严格&#xff0c;尤其是针对高频访问的爬虫IP&…...

3.3 掌握RDD分区

本实战任务旨在掌握Spark RDD 的分区操作&#xff0c;包括理解 RDD 分区的概念、作用、分区数量的确定原则以及如何通过自定义分区器来优化数据处理。通过创建一个 Maven 项目并编写 Scala 代码&#xff0c;实现了一个自定义的科目分区器 SubjectPartitioner&#xff0c;该分区…...

以项目的方式学QT开发(二)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!

API 描述 函数原型 参数说明 push_back() 在 list 尾部 添加一个元素 void push_back(const T& value); value &#xff1a;要添 加到尾部的元 素 这个示例演示了如何创建 std::list 容器&#xff0c;并对其进行插入、删除和迭代操作。在实际应用中&am…...

linux备份与同步工具rsync

版权声明&#xff1a;原创作品&#xff0c;请勿转载&#xff01; 文章目录 版权声明&#xff1a;原创作品&#xff0c;请勿转载&#xff01; 实验环境介绍&#xff1a; 1.工具介绍 2.详细介绍 2.1 本地模式&#xff08;用得少&#xff09; 2.2 远程模式 2.3 守护进程模式…...

Ascend的aclgraph(九)AclConcreteGraph:e2e执行aclgraph

1回顾 前面的几章内容探讨了aclgraph运行过程中的涉及到的关键模块和技术。本章节将前面涉及到的模块串联起来&#xff0c;对aclgraph形成一个端到端的了解。 先给出端到端运行的代码&#xff0c;如下&#xff1a; import torch import torch_npu import torchair import log…...

2025 OceanBase 开发者大会全议程指南

5 月 17 日&#xff0c;第三届 OceanBase 开发者大会将在广州举办。 我们邀请数据库领军者与AI实践先锋&#xff0c;与开发者一起探讨数据库与 AI 协同创新的技术趋势&#xff0c;面对面交流 OceanBase 在 TP、AP、KV 及 AI 能力上的最新进展&#xff0c;深度体验“打破技术栈…...

【深度学习之四】知识蒸馏综述提炼

知识蒸馏综述提炼 目录 知识蒸馏综述提炼 前言 参考文献 一、什么是知识蒸馏&#xff1f; 二、为什么要知识蒸馏&#xff1f; 三、一点点理论 四、知识蒸馏代码 总结 前言 知识蒸馏作为一种新兴的、通用的模型压缩和迁移学习架构&#xff0c;在最近几年展现出蓬勃的活力…...

Java大师成长计划之第23天:Spring生态与微服务架构之服务发现与注册中心

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4-turbo模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在微服务架构中&#xff0c;服务发现…...

list简单模拟实现

成员变量迭代器&#xff08;重点&#xff09;ListIterator运算符重载begin、end 插入、删除inserterase头插、尾插、头删、尾删 operator->const_iterator拷贝构造operator析构函数完整代码 由于前面已经模拟实现了vector&#xff0c;所以这里关于一些函数实现就不会讲的过于…...

undefined reference to `typeinfo for DeviceAllocator‘

出现“undefined reference to typeinfo”链接错误的原因及解决方法如下&#xff1a; class DeviceAllocator { public:explicit DeviceAllocator(DeviceType device_type){};virtual void* allocate(size_t n) 0;virtual void deallocate(void* p) 0;~DeviceAllocator() d…...

动态规划问题 -- 多状态模型(买股票的最佳时机II)

目录 动态规划分析问题五步曲题目概述利用状态机推导状态转移方程式代码编写 动态规划分析问题五步曲 不清楚动态规划分析问题是哪关键的五步的少年们可以移步到 链接: 动态规划算法基础 这篇文章非常详细的介绍了动态规划算法是如何分析和解决问题的 题目概述 链接: 买股票的最…...

【落羽的落羽 C++】进一步认识模板

文章目录 一、非类型模板参数二、模板的特化1. 函数模板特化2. 类模板特化 三、模板的编译分离 一、非类型模板参数 模板参数可以分为类型参数和非类型参数。我们之前使用的都是类型参数&#xff0c;即出现在模板参数列表中&#xff0c;跟在class或typename之类的参数类型名称…...

Java爬虫能处理京东商品数据吗?

Java爬虫完全可以处理京东商品数据。通过Java爬虫技术&#xff0c;可以高效地获取京东商品的详细信息&#xff0c;包括商品名称、价格、图片、描述等。这些信息对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。以下是一个完整的Java爬虫示例&#xff0c;展…...

#跟着若城学鸿蒙# web篇-初探

前言 先看下官方介绍&#xff0c;这里总结了比较重要的几点Web组件基础&#xff1a;加载与渲染网页全面解析Web组件是现代应用开发中不可或缺的重要元素&#xff0c;它允许开发者在原生应用中无缝集成Web内容。本文将全面介绍Web组件的基本功能&#xff0c;包括多种内容加载方…...

Top-p采样:解锁语言模型的创意之门

Top - p采样 是什么&#xff1a;核采样&#xff1a;排序&#xff0c;累计到0.7&#xff0c;随机选择 在自然语言生成和大规模语言模型推理中&#xff0c;Top - p采样&#xff08;又叫核采样&#xff0c;Nucleus Sampling&#xff09;是一种基于累积概率的采样策略。 Top - p介…...

周赛好题推荐

这周周赛很有质量的&#xff0c;上了一个很有意思的数学题目&#xff0c;推了半天..... 给定一个区间[l,r]&#xff0c;求出区间内所有满足x mod 2^i !k的所有正整数&#xff08;最后全部进行异或&#xff09; 首先我们不妨先算出[l,r]区间所有数字的异或&#xff0c;然后在算…...

【RabbitMQ】实现RPC通信的完整指南

文章目录 RPC 通信创建相关队列客户端代码声明队列发送请求接收响应完整代码 服务端代码设置同时只能获取一个消息接收消息完整代码 运行程序启动客户端启动服务端 RPC 通信 RPC (Remote Procedure Call), 即远过程调用。它是一种通过网络从远程计算机上请求服务&#xff0c;而…...