Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>.Rest Property

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Gets the current Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> object's remaining components.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public ReadOnly Property Rest As TRest
public TRest Rest { get; }

Property Value

Type: TRest
The value of the current Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> object's remaining components.

Remarks

The Rest property returns a nested Tuple object that allows access to the eighth though nth components of the tuple. Depending on the total number of components in the tuple, the values of the eighth through fourteenth components can be retrieved from the nested Tuple object's Item1 through Item7 properties. You can then use the Rest property of a nested Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> object to retrieve the Tuple object at the next level of nesting.

You can dynamically determine the number of components in a nested Tuple object that is returned by the Rest property by extracting the digit from its type name. The following example provides an illustration.

Imports System.Reflection

Module Example
   Private outputBlock As System.Windows.Controls.TextBlock

   Public Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
      Example.outputBlock = outputBlock

      Dim from1980  = Tuple.Create(1203339, 1027974, 951270)
      Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer,  _
          Tuple(Of Integer, Integer, Integer)) _
          (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)
      Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer,  _
          Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
          ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

      ShowComponentCount(population)
   End Sub

   Private Sub ShowComponentCount(ByVal tuple As Object)
      Static ctr As Integer = 0
      Static totalComponents As Integer = 0
      Dim components As Integer = 0

      ctr += 1
      Dim name As String = tuple.GetType().Name
      components += Int32.Parse(name.Substring(name.IndexOf("`") + 1))
      If components = 8 Then
         totalComponents += 7
         outputBlock.Text += String.Format("The tuple at level {0} has 7 components.", ctr) & vbCrLf
         ShowComponentCount(tuple.Rest)
      Else
         totalComponents += components
         outputBlock.Text += String.Format("The tuple at level {0} has {1} components.", _
                           ctr, components) & vbCrLf
         outputBlock.Text += String.Format("Total components in tuple: {0}", totalComponents) & vbCrLf
      End If
   End Sub
End Module
' The example displays the following output:
'       The tuple at level 1 has 7 components.
'       The tuple at level 2 has 7 components.
'       The tuple at level 3 has 3 components.
'       Total components in tuple: 17

Examples

The following example creates a 17-tuple object that contains population data for the city of Detroit, Michigan, from 1860 to 2000. The seventh component of the 17-tuple is the population in 1900. The example uses the Rest property to retrieve the values of the eighth through fourteenth components, and it uses the Rest property of the nested Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> object to retrieve the values of the remaining components.

Imports system.Windows.Media

Module Example
   Public Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)
      outputBlock.FontFamily = new FontFamily("Courier New")

      Dim from1980 = Tuple.Create(1203339, 1027974, 951270)

      Dim from1910 As New Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer,  _
          Tuple(Of Integer, Integer, Integer)) _
          (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980)

      Dim population As New Tuple(Of String, Integer, Integer, Integer, Integer, Integer, Integer,  _
          Tuple(Of Integer, Integer, Integer, Integer, Integer, Integer, Integer, Tuple(Of Integer, Integer, Integer))) _
          ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910)

      outputBlock.Text += String.Format("Population of {0}", population.Item1) & vbCrLf
      outputBlock.Text &= vbCrLf
      outputBlock.Text &= String.Format("{0,5}  {1,14}  {2,10}", "Year", "Population", "Change") & vbCrLf

      Dim year As Integer = population.Item2
      ShowPopulation(outputBlock, year, population.Item3)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Item4, population.Item3)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Item5, population.Item4)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Item6, population.Item5)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Item7, population.Item6)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Item1, population.Item7)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Item2, population.Rest.Item1)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Item3, population.Rest.Item2)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Item4, population.Rest.Item3)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Item5, population.Rest.Item4)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Item6, population.Rest.Item5)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Item7, population.Rest.Item6)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Rest.Item1, population.Rest.Item7)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Rest.Item2, population.Rest.Rest.Item1)
      year += 10
      ShowPopulationChange(outputBlock, year, population.Rest.Rest.Item3, population.Rest.Rest.Item2)
   End Sub

   Private Sub ShowPopulationChange(ByVal outputBlock As System.Windows.Controls.TextBlock, ByVal year As Integer, ByVal newPopulation As Integer, ByVal oldPopulation As Integer)
        outputBlock.Text += String.Format("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, _
                          (newPopulation - oldPopulation) / oldPopulation / 10) & vbCrLf
   End Sub

   Private Sub ShowPopulation(ByVal outputBlock As System.Windows.Controls.TextBlock, ByVal year As Integer, ByVal newPopulation As Integer)
      outputBlock.Text += String.Format("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a") & vbCrLf
   End Sub
End Module
' The example displays the following output:
'
'    Population of Detroit
'    Year      Population      Change
'    1860          45,619         n/a
'    1870          79,577      7.44 %
'    1880         116,340      4.62 %
'    1890         205,876      7.70 %
'    1900         285,704      3.88 %
'    1910         465,766      6.30 %
'    1920         993,078     11.32 %
'    1930       1,568,622      5.80 %
'    1940       1,623,452      0.35 %
'    1950       1,849,568      1.39 %
'    1960       1,670,144     -0.97 %
'    1970       1,511,462     -0.95 %
'    1980       1,203,339     -2.04 %
'    1990       1,027,974     -1.46 %
'    2000         951,270     -0.75 %
using System;
using System.Windows.Media;

class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      outputBlock.FontFamily = new FontFamily("Courier New");

      Tuple<int, int, int> from1980 = Tuple.Create(1203339, 1027974, 951270);
      var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>
          (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
      var population = new Tuple<string, int, int, int, int, int, int,
          Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>>
          ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);

      outputBlock.Text += String.Format("Population of {0}\n\n", population.Item1);
      outputBlock.Text += String.Format("{0,5}  {1,14}  {2,10}\n", "Year", "Population", "Change");

      int year = population.Item2;
      ShowPopulation(outputBlock, year, population.Item3);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Item4, population.Item3);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Item5, population.Item4);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Item6, population.Item5);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Item7, population.Item6);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Item1, population.Item7);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Item2, population.Rest.Item1);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Item3, population.Rest.Item2);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Item4, population.Rest.Item3);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Item5, population.Rest.Item4);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Item6, population.Rest.Item5);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Item7, population.Rest.Item6);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Rest.Item1, population.Rest.Item7);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Rest.Item2, population.Rest.Rest.Item1);
      year += 10;
      ShowPopulationChange(outputBlock, year, population.Rest.Rest.Item3, population.Rest.Rest.Item2);
   }

   private static void ShowPopulationChange(System.Windows.Controls.TextBlock outputBlock, int year, int newPopulation, int oldPopulation)
   {
      outputBlock.Text += String.Format("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation,
                        ((double)(newPopulation - oldPopulation) / oldPopulation) / 10) + "\n";
   }

   private static void ShowPopulation(System.Windows.Controls.TextBlock outputBlock, int year, int newPopulation)
   {
      outputBlock.Text += String.Format("{0,5}  {1,14:N0}  {2,10:P2}", year, newPopulation, "n/a") + "\n";
   }
}
// The example displays the following output:
//
//    Population of Detroit
//    Year      Population      Change
//    1860          45,619         n/a
//    1870          79,577      7.44 %
//    1880         116,340      4.62 %
//    1890         205,876      7.70 %
//    1900         285,704      3.88 %
//    1910         465,766      6.30 %
//    1920         993,078     11.32 %
//    1930       1,568,622      5.80 %
//    1940       1,623,452      0.35 %
//    1950       1,849,568      1.39 %
//    1960       1,670,144     -0.97 %
//    1970       1,511,462     -0.95 %
//    1980       1,203,339     -2.04 %
//    1990       1,027,974     -1.46 %
//    2000         951,270     -0.75 %

Version Information

Silverlight

Supported in: 5, 4

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.