惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LINUX DO - 最新话题
Recorded Future
Recorded Future
月光博客
月光博客
博客园 - 【当耐特】
博客园 - 叶小钗
宝玉的分享
宝玉的分享
量子位
雷峰网
雷峰网
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
Vercel News
Vercel News
L
LangChain Blog
B
Blog
Y
Y Combinator Blog
爱范儿
爱范儿
GbyAI
GbyAI
S
Security @ Cisco Blogs
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
博客园 - Franky
P
Palo Alto Networks Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
云风的 BLOG
云风的 BLOG
C
Cisco Blogs
Scott Helme
Scott Helme
I
Intezer
T
The Exploit Database - CXSecurity.com
MyScale Blog
MyScale Blog
T
Tor Project blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Troy Hunt's Blog
N
News and Events Feed by Topic
大猫的无限游戏
大猫的无限游戏
F
Fortinet All Blogs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Security Affairs
Cyberwarzone
Cyberwarzone
PCI Perspectives
PCI Perspectives
小众软件
小众软件
D
DataBreaches.Net
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Know Your Adversary
Know Your Adversary
Forbes - Security
Forbes - Security
S
Securelist
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
The Last Watchdog
The Last Watchdog

博客园 - z5337

【转】既然 java 8 因为组件容易被攻击,.net core 也有大量第三方组件,是不是也容易出问题 【转】最小 web api 学习 【转】使用记事本区分图片格式 【转】蓝牙耳机的播放控制 【转】JoyToKey 键位映射 【转】[C#] 要从接口取时间,单个订单查询和批量查询,写一个接口还是两个接口合适? 【转】[C#] Web API 中的常见层次 【转】[C#] .net core 项目的目标框架设置 【转】[C#] 项目里的配置文件与选项对比 【转】[C#] GlobalUsing 的使用 【转】[.net core] 项目的 Windows 服务器部署 【转】《三字经》全文 【转】[IDEA] 调试时怎么判断使用哪个配置文件 【转】PO、DO、VO、BO、DTO、DAO、POJO 的区别 【转】[web]怎么移除网页最上层的水印 【转】[C#] 30+个.NET开发最佳实践 【转】[C#] WPF 保留选中的高亮色 【转】Windows Server 系统的桌面上显示 此电脑 图标 【转】[C#] 参数前加 in 的作用 【转】[C#] Enum 的 Flags 特性 【转】[C#] Record 的使用 【转】[C#] 预处理指令
【转】[C#] Tuples 元组介绍
z5337 · 2025-07-25 · via 博客园 - z5337

image

以下转自:豆包

在 C# 中,元组(Tuples) 是一种轻量级的数据结构,用于将多个值组合成一个单一的对象。它们提供了简洁的语法来处理临时数据集合,无需定义专门的类或结构。以下是关于 C# 元组的详细介绍:

元组是一种值类型(ValueTuple),允许存储不同类型的多个值。它们有两种主要形式:

  • 匿名元组:使用隐式名称(如Item1Item2等)。
  • 命名元组:为每个元素指定名称,提高可读性。

使用括号直接创建:

var person = ("John", 30, "New York");  

为元素指定名称:

var person = (Name: "Alice", Age: 25, City: "London");
var numbers = new ValueTuple<int, string>(1, "one");
var coords = (10, 20);
int x = coords.Item1;  
var person = (Name: "Bob", Age: 40);
string name = person.Name;  

将元组的元素直接赋值给变量:

var point = (X: 5, Y: 10);
var (x, y) = point;  

忽略不需要的元素:

var (first, _, third) = (1, 2, 3);  
public (string Name, int Age) GetPerson()
{
    return ("Charlie", 35);
}

public void PrintPerson((string Name, int Age) person)
{
    Console.WriteLine($"{person.Name}, {person.Age}");
}

元组的相等性基于元素的值和顺序:

var t1 = (1, "a");
var t2 = (1, "a");
Console.WriteLine(t1 == t2);  
特性元组(Tuples)类 / 结构(Class/Struct)
语法复杂度 简洁,无需定义类型 需要显式定义类或结构
成员访问 通过名称或ItemN 通过属性或字段
用途 临时数据集合 定义具有行为和状态的类型
命名要求 可选(命名元组) 必须定义成员名称
不可变性 默认可变(可重新赋值) 需手动实现不可变属性
  1. 元组是值类型:存储在栈上,适合轻量级数据。
  2. 元素数量限制:最多支持 8 个元素。超过 8 个时,需使用嵌套元组或ValueTuple的构造函数。
  3. 命名元组的兼容性:命名仅在编译时存在,运行时会被忽略(除非使用System.Runtime.CompilerServices.TupleElementNamesAttribute)。
  4. 性能考虑:对于复杂数据模型或需要继承 / 多态的场景,建议使用类或结构。
  • 从方法返回多个值:避免使用out参数。
  • 临时数据集合:如在 LINQ 查询中分组数据。
  • 简化代码:减少为简单数据创建专门类型的开销。
public (int Sum, int Product) Calculate(int a, int b)
{
    return (a + b, a * b);
}

元组是 C# 中处理临时数据集合的高效方式,尤其适合简化方法返回值和参数传递。它们通过简洁的语法减少了样板代码,但对于复杂场景仍需使用类或结构。掌握元组可以提高代码的可读性和开发效率。