c# - 用括号对数据进行分组如何工作?
问题描述
我最近遇到了这个:
(int, string) tst = (0, "Test");
它背后的想法似乎很神奇,以前每当我想映射两个变量时,我都会使用 KeyValuePair。似乎这在 .NET Core 中可用,而不是在我主要编程的常规 .NET 4.7.2 上。
我是否遗漏了什么,或者这仅在 .NET Core 上可用?这个变量分组的名称是什么(所以我可以进一步研究)?是否与创建具有两个变量的对象相同?
这是一个例子:
(int, string) tst = (0, "Test");
var (k, b) = tst;
Console.WriteLine("k: " + k);
Console.WriteLine("b: " + b);
这是一个愚蠢的问题,但感谢您的帮助。
解决方案
您正在查看OP代码中的元组。元组在 C# 7.0 之前也可用,但是 C# 7.0 中元组的改进(引入了ValueTuples)意味着,可以对元组的字段使用语义名称,如示例中所示。
(int, string) tst = (0, "Test");
在上面的代码中,元组被解包并分配给tst
变量。这被称为decontructing
元组。
考虑以下来自 OP 的代码
(int, string) tst = (0, "Test");
var (k, b) = tst;
您可以将其结合为
var (k, b) = (0, "Test");
您也可以在用户定义类型中使用解构。例如,考虑以下代码
public class User
{
public string FirstName{get;set;}
public string LastName{get;set;}
public int Age{get;set;}
}
为了支持上述类中的解构,您可以添加如下方法。
public class User
{
public string FirstName{get;set;}
public string LastName{get;set;}
public int Age{get;set;}
public void Deconstruct(out string fName,out string lName,out int age)
{
fName = FirstName;
lName = LastName;
age = Age;
}
}
Deconstruct 方法现在使我们能够在 Class User 中支持 Deconstruction。您现在可以编写类似于 Tuple Deconstruct 的代码。例如,
var user = new User{FirstName = "John", LastName="Doe",Age=50};
var (fName,lName,age) = user;
推荐阅读
- django - 如何在 Django 中自动保存 Slug?
- c# - QnA 调用在 Bot Framework 中失败,无论是本地还是部署
- javascript - 执行功能的浏览器扩展弹出窗口
- c# - 如何将控件的 BackColor(或其他属性)绑定到存储在 DataSource 中的字符串值?
- c# - BLE扫描设备
- sql - 如何设置存储过程以正确排序
- json - 如何将带有键值的 JSON 文件转换为 apache 骆驼头 - Spring DSL
- mysql - 创建一个连接,我从另一个表中提取计数
- azure - 将 Azure Blob 存储链接到计算机
- .net - VB.net 在列表视图中添加新的列表视图项目并检查为真?