Tutorialsteacher

关注我们

文章
  • C#
  • C# 面向对象编程
  • ASP.NET Core
  • ASP.NET MVC
  • LINQ
  • 控制反转 (IoC)
  • Web API
  • JavaScript
  • TypeScript
  • jQuery
  • Angular 11
  • Node.js
  • D3.js
  • Sass
  • Python
  • Go lang
  • HTTPS (SSL)
  • 正则表达式
  • SQL
  • SQL Server
  • PostgreSQL
  • MongoDB
  • C# - 入门
  • C# - 版本历史
  • C# - 第一个程序
  • C# - 关键词
  • C# - 类和对象
  • C# - 命名空间
  • C# - 变量
  • C# - 隐式类型变量
  • C# - 数据类型
  • 数字
  • 字符串
  • DateTime
  • 结构体
  • 枚举
  • StringBuilder
  • 匿名类型
  • 动态类型
  • 可空类型
  • C# - 值类型和引用类型
  • C# - 接口
  • C# - 运算符
  • C# - if else 语句
  • C# - 三元运算符 ?
  • C# - Switch 语句
  • C# - For 循环
  • C# - While 循环
  • C# - Do-while 循环
  • C# - 分部类
  • C# - Static 关键字
  • C# - 数组
  • 多维数组
  • 交错数组
  • C# - 索引器
  • C# - 泛型
  • 泛型约束
  • C# - 集合
  • ArrayList
  • List
  • SortedList
  • Dictionary
  • Hashtable
  • Stack
  • Queue
  • C# - Tuple
  • C# - ValueTuple
  • C# - 内置异常
  • 异常处理
  • throw 关键字
  • 自定义异常
  • C# - 委托
  • Func 委托
  • Action 委托
  • Predicate 委托
  • 匿名方法
  • C# - 事件
  • C# - 协变
  • C# - 扩展方法
  • C# - 流 I/O
  • C# - File 类
  • C# - FileInfo 类
  • C# - 对象初始化器
  • OOP - 概述
  • 面向对象编程
  • 抽象
  • 封装
  • 关联与组合
  • 继承
  • 多态
  • 方法重写
  • 方法隐藏
  • C# - SOLID 原则
  • 单一职责原则
  • 开闭原则
  • 里氏替换原则
  • 接口隔离原则
  • 依赖倒置原则
  • 设计模式
  • 单例模式
  • 抽象工厂模式
  • 工厂方法模式
Entity Framework Extensions - 提升 EF Core 9
  批量插入
  批量删除
  批量更新
  批量合并

C# - ValueTuple

C# 7.0 (.NET Framework 4.7) 引入了 ValueTuple 结构,它是 Tuple 的值类型表示。

ValueTuple 仅在 .NET Framework 4.7 中可用。如果您的项目中没有看到 ValueTuple,则需要安装 ValueTuple。(.NET Framework 4.7 或更高版本,或 .NET Standard Library 2.0 或更高版本已包含 ValueTuple。)

要安装 ValueTuple 包,请在解决方案资源管理器中右键单击项目并选择 管理 NuGet 包...。这将打开 NuGet 包管理器。单击 浏览 选项卡,在搜索框中搜索 ValueTuple,然后选择 System.ValueTuple 包,如下图所示。

Use ValueTuple in C#

ValueTuple 初始化

创建和初始化 ValueTuple 非常简单。可以使用括号 () 并指定其中的值来创建和初始化。

var person = (1, "Bill", "Gates");
    
//equivalent Tuple
//var person = Tuple.Create(1, "Bill", "Gates");

ValueTuple 也可以通过指定每个元素的类型来初始化,如下图所示。

示例:ValueTuple
(int, string, string) person = (1, "Bill", "Gates");
person.Item1;  // returns 1
person.Item2;   // returns "Bill"
person.Item3;   // returns "Gates"
尝试一下

以下是为每个成员声明类型的简写方式。

示例:ValueTuple
(int, string, string) person = (1, "James", "Bond");
person.Item1;  // returns 1
person.Item2;   // returns "James"
person.Item3;   // returns "Bond"
尝试一下

请注意,我们在上面的元组初始化语句中没有使用 var;相反,我们在括号内提供了每个成员值的类型。

Tuple 需要至少两个值。以下不是元组。

var number = (1);  // int type, NOT a tuple
var numbers = (1,2); //valid tuple

与 Tuple 不同,ValueTuple 可以包含八个以上的值。

var numbers = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);

命名成员

我们可以为 ValueTuple 属性分配名称,而不是使用默认属性名称(如 Item1、Item2 等)。

示例:ValueTuple 的命名成员
(int Id, string FirstName, string LastName) person = (1, "Bill", "Gates");
person.Id;   // returns 1
person.FirstName;  // returns "Bill"
person.LastName; // returns "Gates"
尝试一下

我们也可以在右侧为值分配成员名称,如下所示。

var person = (Id:1, FirstName:"Bill", LastName: "Gates");

请注意,我们可以在左侧或右侧提供成员名称,但不能同时在两侧提供。左侧优先于右侧。以下将忽略右侧的名称。

// PersonId, FName, LName will be ignored.
(int Id, string FirstName, string LastName) person = (PersonId:1, FName:"Bill", LName: "Gates");

// PersonId, FirstName, LastName will be ignored. It will have the default names: Item1, Item2, Item3.
(string, string, int) person = (PersonId:1, FName:"Bill", LName: "Gates");

我们也可以将变量作为成员值进行分配。

string firstName = "Bill", lastName = "Gates";
var person = (FirstName: firstName, LastName: lastName);

ValueTuple 作为参数

ValueType 也可以是方法的参数类型或返回类型。以下方法接受一个 ValueTuple 类型参数。

示例:ValueTuple 作为参数
static void Main(string[] args)
{
    DisplayTuple((1, "Bill", "Gates"));
}

static void DisplayTuple((int, string, string) person)
{
    Console.WriteLine("{0}, {1}, {2}", person.Item1, person.Item2, person.Item3);
}
尝试一下

以下方法从方法返回一个 ValueTuple。

以下方法从方法返回一个 ValueTuple。

示例:ValueTuple 作为返回类型
static void Main(string[] args)
{
    var person = GetPerson();
    Console.WriteLine("{0}, {1}, {2}", person.Item1, person.Item2, person.Item3);
}

static (int, string, string) GetPerson() 
{
    return (1, "Bill", "Gates");
}
尝试一下

您还可以为从方法返回的 ValueTuple 指定成员名称。

示例:ValueTuple 作为返回类型
static void Main(string[] args)
{
    var person = GetPerson();
    Console.WriteLine("{0}, {1}, {2}", person.Id, person.FirstName, person.LastName);
}

static (int Id, string FirstName, string LastName) GetPerson() 
{
    return (Id:1, FirstName: "Bill", LastName: "Gates");
}
尝试一下

解构

可以通过解构 ValueTuple 来检索其单个成员。解构声明语法将 ValueTuple 分解为其各个部分,并将这些部分单独分配给新的变量。

示例:解构 ValueTuple
static void Main(string[] args)
{
    // change property names
    (int PersonId, string FName, string LName) = GetPerson();
}
static (int, string, string) GetPerson() 
{
    return (Id:1, FirstName: "Bill", LastName: "Gates");
}
尝试一下

我们也可以使用 var 代替显式数据类型名称。

示例:解构 ValueTuple
static void Main(string[] args)
{
    // use var as datatype
    (var PersonId, var FName, var LName) = GetPerson();
}
static (int, string, string) GetPerson() 
{
    return (Id:1, FirstName: "Bill", LastName: "Gates");
}
尝试一下

ValueTuple 还允许在解构中对您不打算使用的成员使用“丢弃”。

示例:解构 ValueTuple
// use discard _ for the unused member LName
(var id, var FName, _) = GetPerson(); 
尝试一下
TUTORIALSTEACHER.COM

TutorialsTeacher.com 是您权威的技术教程来源,旨在通过循序渐进的方法,指导您掌握各种网络和其他技术。

我们的内容旨在帮助所有水平的学习者轻松快速地学习技术。访问此平台即表示您已阅读并同意遵守我们的使用条款和隐私政策,这些条款和政策旨在保障您的体验和隐私权。

[email protected]

关于我们使用条款隐私政策
copywrite-symbol

2024 TutorialsTeacher.com. (v 1.2) 版权所有。