c# ValueTuple

详解C# Tuple VS ValueTuple(元组类 VS 值元组) C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple。这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解ValueTuple的好处和用法。 如果您对Tuple足够了解,可以直接跳过章节”回顾Tuple”,直达章节”ValueTuple详解”,查看值元组的炫丽用法。   回顾Tuple Tup 阅读详情

为什么我们需要 ValueTuple?

  • Tuple 是引用类型,但 ValueTuple 是值类型。
  • Tuple 不提供命名约定,但 ValueTuple 提供了强大的命名约定。
  • 在 Tuples 中,您不能创建零分量的元组,但在 ValueTuple 中,您可以创建零元素的元组。
  • ValueTuple 的性能优于 Tuple。 因为 ValueTuple 提供了一种轻量级的机制,用于从现有方法返回多个值。 并且 ValueTuple 的语法比 Tuples 更优化。
  • ValueTuple 通过使用解构和 _ 关键字为访问值元组的元素提供了更大的灵活性。 但是 Tuple 不能提供解构的概念和 _ 关键字。
  • 在 ValueTuple 中,item1 和 item2 等成员是字段。 但在元组中,它们是属性。
  • 在 ValueTuple 中,字段是可变的。 但是在元组中,字段是只读的。

Creating a ValueTuple

  • Using Constructor

    // Constructor for creating one element
    ValueTuple(T1)
    // Constructor for creating two elements
    ValueTuple<T1, T2>(T1, T2)
    // Constructor for creating eight elements
    ValueTuple<T1, T2, T3, T4, T5, T6, T7, TRest>(T1, T2, T3, T4, T5, T6, T7, TRest) /


Sample

using System;
 
class GFG {
 
    // Main method
    static public void Main()
    {
 
        // ValueTuple with one element
        ValueTuple<int> ValTpl1 = new ValueTuple<int>(345678);
 
        // ValueTuple with three elements
        ValueTuple<string, string, int> ValTpl2 = new ValueTuple<string,
                                        string, int>("C#", "Java", 586);
 
        // ValueTuple with eight elements
        ValueTuple<int, int, int, int, int, int, int, ValueTuple<int> > ValTpl3 = new ValueTuple<int,
                                  int, int, int, int, int, int, ValueTuple<int> >(45, 67, 65, 34, 34,
                                                                    34, 23, new ValueTuple<int>(90));
    }
}

  • Using Create Method

// Method for creating an empty value tuple
Create();
// Method for creating 1-ValueTuple
Create(T1)
// Method for creating 8-ValueTuple
Create<T1, T2, T3, T4, T5, T6, T7, TRest>(T1, T2, T3, T4, T5, T6, T7, T8)


Sample

using System;
 
public class GFG {
 
    // Main method
    static public void Main()
    {
 
        // Creating 0-ValueTuple
        // Using Create() Method
        var Valtpl1 = ValueTuple.Create();
 
        // Creating 3-ValueTuple
        // Using Create(T1, T2, T3) Method
        var Valtpl2 = ValueTuple.Create(12, 30, 40, 50);
 
        // Creating 8-ValueTuple
        // Using Create(T1, T2, T3, T4, T5, T6, T7, T8) Method
        var Valtpl3 = ValueTuple.Create(34, "GeeksforGeeks",
                      'g', 'f', 'g', 56.78, 4323, "geeks");
    }
}
  • Using parenthesis()

named member

using System;
 
public class GFG {
    static public void Main()
    {
        (int age, string Aname, string Lang) author = (23, "Sonia", "C#");
    }
}
using System;
 
public class GFG {
 
    static public void Main()
    {
        var author = (age : 23, Aname
                      : "Sonia", Lang
                      : "C#");
    }
}

UnNamed Member

using System;
 
public class GFG {
    static public void Main()
    {
        var author = (20, "Siya", "Ruby");
    }
}
using System;
 
public class GFG {
    static public void Main()
    {
        ValueTuple<int, string, string> author = (20, "Siya", "Ruby");
    }
}

Accessing ValueTuple members

  • Accessing unnamed members
using System;
 
public class GFG {
 
    // Main Method
    static public void Main()
    {
 
        // ValueTuple with three elements
        var author = (20, "Siya", "Ruby");
 
        // Accessing the ValueTuple
        // Using default Item property
        Console.WriteLine("Age:" + author.Item1);
        Console.WriteLine("Name:" + author.Item2);
        Console.WriteLine("Language:" + author.Item3);
    }
}
  • Accessing Named members:
using System;
 
public class GFG {
 
    // Main Method
    static public void Main()
    {
 
        // ValueTuple with three elements
        var library = (Book_id : 2340, Author_name
                       : "Arundhati Roy", Book_name
                       : "The God of Small Things");
 
        // Accessing the ValueTuple
        // according to their names
        Console.WriteLine("Book Id: {0}", library.Book_id);
        Console.WriteLine("Author Name: {0}", library.Author_name);
        Console.WriteLine("Book Name: {0}", library.Book_name);
    }
}

Returning ValueTuple

using System;
 
public class GFG {
 
    // This method returns the tourist details
    static(int, string, string) TouristDetails()
    {
        return (384645, "Sophite", "USA");
    }
 
    // Main method
    static public void Main()
    {
 
        // Store the data provided by the TouristDetails method
        var(Tourist_Id, Tourist_Name, Country) = TouristDetails();
 
        // Display data
        Console.WriteLine("Tourist Details: ");
        Console.WriteLine($ "Tourist Id: {Tourist_Id}");
        Console.WriteLine($ "Tourist Name: {Tourist_Name}");
        Console.WriteLine($ "Country: {Country}");
    }
}
C#元组探秘:从Tuple到ValueTuple,全面解读与实战运用 的引入,后者凭借其值类型性质、命名字段以及更现代化的语法,成为在C#中处理元组数据的首选。它是一个引用类型,允许您创建包含多个不同类型的元素的不可变数据结构。创建了一个带有命名字段的元组。通过在括号内指定字段名和对应的值,我们可以直接通过有意义的名称(如。它是值类型,这意味着相比引用类型元组,它在内存占用和性能上通常更优。元组也可用于临时数据聚合,特别是在LINQ查询或其他需要组合不同来源数据的场景。创建一个包含人员姓名和年龄的列表,然后通过LINQ查询找出最年长的人。类型,用于支持8个以上元素的元组。 阅读详情

相关推荐

C# Tuple 和 ValueTuple 的比较

由于 ValueTuple 是一个结构体,它在堆栈上分配内存,使得创建和销毁对象的开销较小。而 Tuple 是一个类,它在堆上分配内存,因此在创建和销毁对象时会有一定的开销。总结起来,Tuple 和 ValueTuple 都是用于存储和传递多个值的数据结构,但在语法和性能上有所不同。而 ValueTuple 则更适合用于临时存储和传递一组相关的值,尤其是当这些值在方法内部使用,并且不需要在方法之间传递时。在 C# 编程中,Tuple 和 ValueTuple 是两种常用的数据结构,用于存储和传递多个值。

2301_79326510的博客 350

如何使用 C# 中的 ValueTuple

Tuple 是一种数据结构,它由一个有序的、有限的、大小固定的、不可变的异构元素的序列组成,当我们说 Tuple 中的元素不可变,意味着其中的元素不能进行修改。ValueTuple 是在...

dotNET跨平台 3077

C#里低版本使用元组(System.ValueTuple)

为了解决上述两种情况,在高版本的C#已经引入元组,ValueTuple是C# 7.0的新特性之一,.Net Framework 4.7以上版本可用。这里定义了两个元素的元组,第一个元素是double类型, 第二个元素是float类型,然后赋值给t1变量。还有另外一种情况,想把一组关联的数据写到一起,就需要声明一个类或结构,这样会导致编写比较多的代码。析构的过程恰恰与元组的声明和初始化相反,析构是将已存在的元组析构成多个单独的变量。在没有使用元组之前,要想在C#里返回多个值,是比较麻烦一些。

大坡3D软件开发 2274

C# Tuple、ValueTuple

Tuple提供了一种快速、简便的方式来创建包含多个元素的数据结构,但其缺点也不容忽视。在C# 7.0及更高版本中,ValueTuple作为Tuple的改进版,提供了更好的性能和更灵活的使用方式,是处理多个返回值或临时数据结构时的更好选择。

語衣的个人博客 2275

C#最佳实践:为何使用 ValueTuple 而非 Tuple

在 C# 编程的广阔天地中,数据结构的选择直接影响着代码的性能与可读性。Tuple 和 ValueTuple 作为用于存储多个值的数据结构,在实际开发中经常被使用。然而,随着 C# 语言的不断发展与完善,ValueTuple 逐渐成为更优的选择。接下来,我们将深入探讨为何在 C# 编程中,使用 ValueTuple 比 Tuple 更符合最佳实践。

Amon的专栏 361

C#每日面试题-ValueTuple和Tuple的区别

在C#中,Tuple(元组)和ValueTuple是两种用于存储多个不同类型数据的容器类型,前者自.NET Framework 4.0引入,后者则在C# 7.0/.NET Framework 4.7(.NET Core 2.0)中推出,旨在解决Tuple的诸多痛点。二者看似功能相似,实则在底层实现、语法设计、使用场景上存在本质差异,也是面试中高频考察的基础知识点。本文将从核心维度拆解二者区别,结合代码示例帮你快速理解并掌握。

Amon的专栏 1245

C# ValueTuple 原理

本文告诉大家一些 ValueTuple 的原理,避免在使用出现和期望不相同的值。ValueTuple 是 C# 7 的语法糖,如果使用的 .net Framework 是 4.7 以前,那么需要使用 Nuget 安装System.ValueTuple

lindexi 2171

Android车载应用开发:Kotlin与Automotive OS深度实践

Android Automotive OS(AAOS)是Google专为车辆设计的操作系统,直接运行于车机硬件,提供完整的车载信息娱乐系统(IVI)。与Android Auto不同,AAOS允许开发者深度集成车辆硬件功能,如空调控制和传感器数据读取,同时遵循严格的驾驶安全规范。Kotlin作为开发语言,具备空安全设计、扩展函数和协程支持等优势,简化了开发流程。开发环境配置包括Android Studio、AAOS模拟器和Gradle配置,核心组件如CarAppService、Screen与模板系统,以及车辆

时小雨的专栏 3444

C# ValueTuple 值元组的用法

C#中的Value Tuple是一种轻量级的数据结构,用于在单个变量中存储多个值。它们在System.ValueTuple命名空间下,并且被设计为可变的(mutable),允许你在创建后修改元素的值。1.结构类型(Value Type):Value Tuples是值类型(struct),而不是引用类型(class)。2.可变性:Value Tuples的字段可以修改,而System.Tuple中的元素是只读的。4.解构:Value Tuples可以很容易地被解构到独立的变量中,这使得处理多返回值变得简单。

fkdw27的博客 822

从原理图到PCB:基于Allegro的8槽PXIe背板高速设计实战

本文详细介绍了基于Allegro软件进行8槽PXIe背板高速设计的完整实战流程。从理解规范、原理图设计、PCB布局规划,到高速PCIe差分对与精密时钟的布线艺术,再到电源与地处理以及最终的设计验证与生产文件输出,系统性地阐述了确保背板信号完整性、电源完整性和系统稳定性的关键技术与工程实践。

weixin_28312391的博客 205

【气动弹性实战】基于Nastran与Patran的机翼颤振仿真:从模态分析到临界速度预测

本文详细介绍了基于Nastran与Patran的机翼颤振仿真全流程,从气动弹性问题解析、机翼建模技巧到模态分析与临界速度预测。通过实战案例展示如何利用SOL 145求解器进行颤振分析,并分享网格划分、材料属性设置等工程经验,帮助工程师有效解决飞行器设计中的气动弹性耦合问题。

weixin_33725722的博客 594

C# 如何给 ValueTuple 返回值添加注释

在 C# 7.0 可以在一个方法的返回,返回多个参数,通过 ValueTuple 的方法,但是和单个参数返回不同的是,如何对多个参数返回每个参数进行单独的注释? 如使用下面的代码,我尝试在一个方法返回两个不同的概念的值,在之前,如果通过 out 的返回,我可以单独给每个参数做注释 static (int s, int t) F(int x, int y) { return (x + ...

lindexi 1043

车道线检测1.0(Python+Opencv基础版)

车道线检测是指在道路上自动检测和识别车道线的过程。车道线是道路上的标记,用于指示车辆行驶的方向和位置。 通过对车道线进行检测和识别,自动驾驶和智能驾驶系统可以实现车辆的自动导航、车道保持、车道偏离警告等功能。

Dream_orz的博客 4264

C#中System.ValueTuple和System.Tuple的区别

我个人觉得最大的区别是一个是值类型,一个是引用类型 ,System.ValueTuple的值是可以变化的,而System.Tuple的值是只读的,初始化声明后就不可变了,System.ValueTuple可以有任意数量的元素,而System.Tuple只能有8个元素,最后一个元素只能做嵌套使用,比较麻烦。他们共同点是下标都是1开始的。在学习C#的过程中,发现C#7.0支持了一个新的类System.Tuple。以上是我学习的笔记 如有错误请大佬们包容指正。元组是具有特定数量和元素序列的数据结构。

qq_50852958的博客 755

高频面试题-项目介绍篇

聊聊如何介绍项目经历。

m0_73359763的博客 1908

UniApp 与 Taro 深度解析:如何根据项目需求选择最佳跨平台框架?

本文深度对比了UniApp和Taro两大主流跨平台开发框架。UniApp基于Vue生态,提供开箱即用的高效开发体验,尤其适合快速覆盖多端小程序;Taro则根植React范式,架构灵活,便于与现有React生态集成,更适合对性能和原生体验有高要求的复杂项目。文章结合团队技术栈、项目类型及性能需求,为开发者提供了清晰的选型指南。

snow3的博客 204

C#关键字扫盲——Tuple(元组类) 、ValueTuple(值元组)

当方法返回值大于一个时我们有时用out或结构体或类来处理,今天介绍一个简便的多返回值方式。 ValueTuple 是 Tuple的扩展,本文只针对最新的ValueTuple 做讲解,Tuple有很多不便之处,总之过时的就让他过去吧。 Tuple ValueTuple .Net Framework 4.0 内置 Nuget 安装System.ValueTyp...

冰封的落叶的博客 6836

Intellij IDEA 使用教程(一)Jdk安装和配置

一.JDK下载 这里下载的是Java SE 8u181 64位版本。可以根据自己电脑配置来选择不同版本。 官网下载JDK 二.安装JDK 双击运行jdk-8u181-windows-x64.exe安装程序 选择安装目录,然后点击下一步 等待安装 安装JRE,就是java的运行环境,可以安装在java目录下 等待安装 安装完成。点击关闭。 三.java环境变量配置 关于环境变量的配置,...

岁月不饶人,我亦未曾饶过岁月 4054
上一篇: c# Tuple
下一篇: c# Collections
a_codecat
博客等级 码龄4年 8粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值