了解C#中的ValueTuples
ValueTuples被用来从一个方法中返回多个值。由于这些组件是可变的,你可以在它们被声明后为其分配新的值。
ValueTuples仅在C#版本7.0 (.NET Framework 4.7)中可用。如果你在你的项目中没有看到ValueTuple,这意味着你必须安装ValueTuple 包。
创建和初始化ValueTuples
你可以使用以下方法创建ValueTuples。
- 使用一个构造函数。
下面的代码允许人们使用构造函数来创建一个ValueTuple。我们将使用这个组件来生成两个元素。
class ConstructorExample
{
static public void Main()
{
ValueTuple<string, string,> valueTuple =
new ValueTuple<string,string,>("Name", "School",);
}
}
- 使用
create方法。
这个方法可以使用create 方法生成一个最多有8 元素的ValueTuple。
例子。
class Create{
static public void Main()
{
// 0-ValueTuple using Create() Method
var valueTuple0 = ValueTuple.Create();
// 2-ValueTuple using Create(T1, T2,) Method
var valueTuple3 = ValueTuple.Create(12, 30, 40,);
}
}
- 使用小括号。
使用小括号是创建和初始化一个ValueTuple的最简单的方法。这是因为你将在括号内指定数值。
在命名的成员中使用小括号的例子。
class Parenthesis {
static public void Main()
{ // named members
(int age, string Name, string Lang) student = (23, "Sonia", "C#");
}
}
与未命名的成员一起使用小括号的例子。
class Parenthesis {
static public void Main()
{
//unnamed member
ValueTuple<string, string > student = ("Mark", "C#");
}
}
访问ValueTuple命名和未命名的成员
未命名的ValueTuple成员有默认的项目属性名称。换句话说,你可以使用它们的默认名称访问这些成员。
例子。
class Unnamed
{
public static void Main()
{
var patient = (2020, "Michael Williams", "Tanzania");
Console.WriteLine("Year:" + patient.Item1);
Console.WriteLine("Patient:" + patient.Item2);
Console.WriteLine("Country:" + patient.Item3);
}
}
输出。
Year:2020
Patient: Michael Williams
Country: Tanzania
我们将首先为ValueTuple属性分配名称。然后我们将访问命名的成员。下面的代码显示了如何分配名称。
var student = (Student_id : 4567, Student_name : "Mary Kims",Course: "Computer Science");
现在我们已经分配了新的名字,让我们来访问这些成员。
我们将使用我们分配给成员的新名称而不是默认名称,如下所示。
class Program {
static public void Main()
{
var student = (Student_id : 4567, Student_name : "Mary Kims",Course: "Computer Technology");
Console.WriteLine("Student id: {0}", student.Student_id);
Console.WriteLine("Student Name: {0}", student.Student_name);
Console.WriteLine("Course: {0}", student.Course);
}
}
输出。
Student id:4567
Student Name: Mary Kims
Course: Computer Technology
从一个方法返回ValueTuple
我们可以从一个方法中返回多个值。在下面的例子中,我们将不使用ref 或out 参数。
class Returntype
{
public static void Main()
{
var student = GetStudentInformation();
Console.WriteLine("Student Information");
Console.WriteLine("Id :{0}", student.Item1);
Console.WriteLine("Name:{0}", student.Item2);
Console.WriteLine("Age:{0}", student.Item3);
Console.WriteLine("Course:{0}", student.Item4);
Console.ReadLine();
}
public static (int, string, int, string) GetStudentInformation()
{
var student = (55, "Robert", 25, "Computer Science");
return student;
}
}
输出。
Student Information
Id:55
Name:Robert
Age:25
Course:Computer Science
解构ValueTuple
单个成员可以通过解构一个ValueTuple获得。解构声明语法将每个组件分配给一个新的变量。
在C#中,有许多方法可以解构一个ValueTuple的元素并将它们分配给局部变量。
为了给每个元素创建一个离散的变量,我们可以使用parenthesis() 方法来指定每个元素的类型。
class deconstruction
{
static void Main(string[] args)
{
var (Idnumber, Name, Age) = GetPersonalInformation();
Console.WriteLine("Personal Information");
Console.WriteLine("Idnumber:{0}", Idnumber);
Console.WriteLine("Name:{0}", Name);
Console.WriteLine("Age:{0}", Age);
Console.ReadLine();
}
public static (int, string, int) GetPersonalInformation()
{
return (2795, "Michelle Williams", 35);
}
}
}
输出。
Personal Information
Id:2795
Name:Michelle Williams
Age:35
ValueTuple结构
一个ValueTuple结构有静态方法,使你能够创建最多有8 个元素的值。
它还有一些辅助方法,允许人们在不定义每个组件的类型的情况下创建元素。
方法。
CompareTo()
这个方法是用来比较ValueTuples的实例。由于这些实例没有元素,它们被认为是相等的。
Equals()
通常应用的函数是Equals(ValueTuple) 和Equals(object) 。这些方法适用于一些产品,如.NET 框架
-
Equals(ValueTuple)是用来确定两个ValueTuple实例是否相等。 -
Equals(object)是用来确定当前使用的ValueTuple实例是否等同于一个特定的对象。
- GetHashCode()
该方法用于返回一个ValueTuple实例的哈希代码。
- ToString()
这个函数返回一个ValueTuple实例的字符串表示。它适用于。NET,.NET Core,.NET 框架。
- 创建()
这个函数用来创建一个零组件的ValueTuple。
- Create<T1,>(T1);
这个方法创建一个有一个组件的ValueTuple(一个单子),其中 "T1 "是第一个ValueTuple的类型。
- Create<T1, T2>(T1, T2);
这个函数创建一个新的ValueTuple,它有两个组件(一对),"T2 "是第二个ValueTuple的类型。
总结
在本教程中,我们已经学会了。
- 如何创建和初始化ValueTuples。
- 如何访问ValueTuple命名和未命名的成员。
- 如何从一个方法中返回ValueTuple。
因此,你可以使用这些知识来建立其他高质量的应用程序。