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.