了解C#中的ValueTuples

89 阅读4分钟

了解C#中的ValueTuples

ValueTuples被用来从一个方法中返回多个值。由于这些组件是可变的,你可以在它们被声明后为其分配新的值。

ValueTuples仅在C#版本7.0 (.NET Framework 4.7)中可用。如果你在你的项目中没有看到ValueTuple,这意味着你必须安装ValueTuple 包。

创建和初始化ValueTuples

你可以使用以下方法创建ValueTuples。

  1. 使用一个构造函数。

下面的代码允许人们使用构造函数来创建一个ValueTuple。我们将使用这个组件来生成两个元素。

  class ConstructorExample
{
    static public void Main()
    {
     ValueTuple<string, string,> valueTuple =
      new ValueTuple<string,string,>("Name", "School",);  
    }
} 
  1. 使用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,);
    }
}
  1. 使用小括号。

使用小括号是创建和初始化一个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

我们可以从一个方法中返回多个值。在下面的例子中,我们将不使用refout 参数。

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 框架

  1. Equals(ValueTuple) 是用来确定两个ValueTuple实例是否相等。

  2. 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。

因此,你可以使用这些知识来建立其他高质量的应用程序。