如何使用括号对数据进行分组?

How does grouping data with parentheses work?

我最近遇到了这个:

(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);

这是一个愚蠢的问题,但感谢您的帮助。

您正在查看 C# 7.0 中的 Tuples in the code in OP. Tuples were available before C# 7.0 too, but the improvements in Tuples (with introduction of ValueTuples) 意味着,可以对元组的字段使用语义名称,如示例中所示。

(int, string) tst = (0, "Test");

在上面的代码中,元组被解包并分配给 tst 变量。这被称为 decontructing 元组。

考虑 OP

中的以下代码
(int, string) tst = (0, "Test");
var (k, b) = tst;

您可以将其合并为

var (k, b) =  (0, "Test");

您也可以在用户定义类型中使用 Deconstruct。例如,考虑以下代码

public class User
{
    public string FirstName{get;set;}
    public string LastName{get;set;}
    public int Age{get;set;}
}

为了支持上述class中的Deconstruct,您可以添加如下方法。

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 用户中支持解构。您现在可以编写类似于 Tuple Deconstruct 的代码。例如,

var user = new User{FirstName = "John", LastName="Doe",Age=50};
var (fName,lName,age) = user;