Tuple<T1,T2> 类

定义

表示 2 元组,或二元组。

public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable, System.Runtime.CompilerServices.ITuple
[System.Serializable]
public class Tuple<T1,T2> : IComparable, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable

类型参数

T1

此元组的第一个组件的类型。

T2

此元组的第二个组件的类型。

继承
Tuple<T1,T2>
属性
实现

注解

元组是具有特定数目和值序列的数据结构。 类 Tuple<T1,T2> 表示一个 2 元组或一对,它是具有两个组件的元组。 2 元组类似于结构 KeyValuePair<TKey,TValue>

可以通过调用Tuple<T1,T2>构造函数或静态Tuple.Create<T1,T2>(T1, T2)方法来实例化Tuple<T1,T2>对象。 可以使用只读 Item1 属性和 Item2 实例属性检索元组组件的值。

元组通常采用四种不同的方式:

  • 表示单个数据集。 例如,元组可以表示数据库中的记录,其组件可以表示该记录的字段。

  • 为了提供对数据集的轻松访问和操作。 以下示例定义包含学生名称及其相应测试分数的对象数组 Tuple<T1,T2> 。 然后循环访问数组以计算平均测试分数。

    using System;
    
    public class Example
    {
       public static void Main()
       {
          Tuple<string, Nullable<int>>[] scores = 
                        { new Tuple<string, Nullable<int>>("Jack", 78),
                          new Tuple<string, Nullable<int>>("Abbey", 92), 
                          new Tuple<string, Nullable<int>>("Dave", 88),
                          new Tuple<string, Nullable<int>>("Sam", 91), 
                          new Tuple<string, Nullable<int>>("Ed", null),
                          new Tuple<string, Nullable<int>>("Penelope", 82),
                          new Tuple<string, Nullable<int>>("Linda", 99),
                          new Tuple<string, Nullable<int>>("Judith", 84) };
          int number;
          double mean = ComputeMean(scores, out number);
          Console.WriteLine("Average test score: {0:N2} (n={1})", mean, number);
       }
    
       private static double ComputeMean(Tuple<string, Nullable<int>>[] scores, out int n) 
       {
          n = 0;      
          int sum = 0;
          foreach (var score in scores)
          {
             if (score.Item2.HasValue)
             { 
                n += 1;
                sum += score.Item2.Value;
             }
          }     
          if (n > 0)
             return sum / (double) n;
          else
             return 0;
       }
    }
    // The example displays the following output:
    //       Average test score: 87.71 (n=7)
    
  • 若要返回方法中的out多个值,而不使用 C#) 中的参数 (或ByRefVisual Basic) 中的参数 (。 例如,以下示例使用对象 Tuple<T1,T2> 返回从整数除法得出的商数和余数。

    using System;
    
    public class Class1
    {
       public static void Main()
       {
          int dividend, divisor;
          Tuple<int, int> result;
          
          dividend = 136945; divisor = 178;
          result = IntegerDivide(dividend, divisor);
          if (result != null)
             Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}", 
                               dividend, divisor, result.Item1, result.Item2);
          else
             Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);
                            
          dividend = Int32.MaxValue; divisor = -2073;
          result = IntegerDivide(dividend, divisor);
          if (result != null)
             Console.WriteLine(@"{0} \ {1} = {2}, remainder {3}", 
                               dividend, divisor, result.Item1, result.Item2);
          else
             Console.WriteLine(@"{0} \ {1} = <Error>", dividend, divisor);
       }
    
       private static Tuple<int, int> IntegerDivide(int dividend, int divisor)
       {
          try {
             int remainder;
             int quotient = Math.DivRem(dividend, divisor, out remainder);
             return new Tuple<int, int>(quotient, remainder);
          }   
          catch (DivideByZeroException) {
             return null;
          }      
       }
    }
    // The example displays the following output:
    //       136945 \ 178 = 769, remainder 63
    //       2147483647 \ -2073 = -1035930, remainder 757
    
  • 通过单个参数将多个值传递给方法。 例如,该方法 Thread.Start(Object) 具有一个参数,用于向线程在启动时执行的方法提供一个值。 如果提供对象 Tuple<T1,T2> 作为方法参数,则可以使用两项数据提供线程的启动例程。

构造函数

Tuple<T1,T2>(T1, T2)

初始化 Tuple<T1,T2> 类的新实例。

属性

Item1

获取当前 Tuple<T1,T2> 对象的第一个分量的值。

Item2

获取当前 Tuple<T1,T2> 对象的第二个分量的值。

方法

Equals(Object)

返回一个值,该值指示当前的 Tuple<T1,T2> 对象是否与指定对象相等。

GetHashCode()

返回当前 Tuple<T1,T2> 对象的哈希代码。

GetType()

获取当前实例的 Type

(继承自 Object)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

返回表示此 Tuple<T1,T2> 实例的值的字符串。

显式接口实现

IComparable.CompareTo(Object)

比较当前 Tuple<T1,T2> 对象与指定对象,并返回一个整数,该整数指示当前对象在排序顺序中的位置:是在指定对象之前、之后还是在与指定对象相同的位置。

IStructuralComparable.CompareTo(Object, IComparer)

使用指定的比较器将当前的 Tuple<T1,T2> 对象与指定对象进行比较,并返回一个整数,该整数指示当前对象在排序顺序中的位置是在指定对象之前、之后还是与其相同。

IStructuralEquatable.Equals(Object, IEqualityComparer)

返回一个值,该值根据指定的比较方法指示当前的 Tuple<T1,T2> 对象是否与指定对象相等。

IStructuralEquatable.GetHashCode(IEqualityComparer)

使用指定的计算方法计算当前 Tuple<T1,T2> 对象的哈希代码。

ITuple.Item[Int32]

获取指定 Tuple 元素的值。

ITuple.Length

获取 Tuple 中的元素数。

扩展方法

Deconstruct<T1,T2>(Tuple<T1,T2>, T1, T2)

将具有 2 个元素的元组解构为不同的变量。

ToValueTuple<T1,T2>(Tuple<T1,T2>)

Tuple 类的实例转换为 ValueTuple 结构的实例。

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

另请参阅