The code snippet in Listing 2 creates a 5-tuple using the static "Create" method. The tuple is a set of five data types: three strings, one int, and one double data type.
// Create a 5-tuple
var pubAuthor = Tuple.Create("Mahesh Chand", "Graphics Programming with GDI+", "Addison Wesley", 2004, 49.95);
System.Console.WriteLine("Author {0} wrote his fourth book titled {1} for {2} in {3}. Price: {4}",
pubAuthor.Item1, pubAuthor.Item2, pubAuthor.Item3, pubAuthor.Item4, pubAuthor.Item5);
Listing 2.
How to create nested tuples in C#?
C# supports tuples with up to seven elements. To have a tuple with more than seven elements, you can use the 8th element, TRest, to create nesting tuple objects. The code snippet in Listing 3 creates a tuple with a nested tuple inside it.
var even8 = new Tuple<int, int, int, int, int, int, int, Tuple<double, double, double>> (2, 4, 6, 8, 10, 12, 14, Tuple.Create(1.1,1.2,1.3));
Console.WriteLine("{0},{1},{2}", even8.Rest.Item1, even8.Rest.Item2, even8.Rest.Item3);
Listing 3.
How to use a tuple in a method?
A tuple is useful when you need to pass a data set as a single parameter of a method without using ref and out parameters. The code snippet in Listing 4 passes a tuple as a parameter of the method.
public void SetTupleMethod(Tuple < string, string, int > tupleAuthor) {
var author2 = tupleAuthor;
Console.WriteLine("Author:{0}, Title:{1}, Year:{2}.", author2.Item1, author2.Item2, author2.Item3);
}
Listing 4.
The following code snippet in Listing 5 calls the method.
ts.SetTupleMethod(new Tuple<string, string, int>(
"Mike Gold", "Code UML", 2005));
Listing 5.
How to return tuples in C#?
A tuple can be used to return a data set as a single variable of a method. The code snippet in Listing 6 returns a tuple with three values.
public static Tuple < string, string, int > GetTupleMethod() {
// Create a 3-tuple and return it
var author = new Tuple < string,
string, int > ("Mahesh Chand", "Programming C#", 2002);
return author;
}
Listing 6.
The code snippet in Listing 7 calls the method, gets a tuple and reads its values.
var author2 = TupleSamples.GetTupleMethod();
Console.WriteLine("Author:{0}, Title:{1}, Year:{2}.", author2.Item1, author2.Item2, author2.Item3);
Listing 7.
C# 7.0 and Tuples
Note
C# 7.0 features may not be available as a part of Visual Studio 2017 RC or other previous versions. To add the Tuples feature, you may want to download and install the NuGet package.
Step 1
Right-click on the project name in Solution Explorer and select “Manage NuGet Package”.
Step 2
Click on the "Browse" tab and type System.ValueTuple in the TextBox. You will see the package name, as shown below.
Step 3
Select “TuplesSample” and click on the "Install" button.
Follow the instructions.
You’re now ready to use C# 7.0 tuples.
C# 7.0 extends the tuples' functionality by adding tuple types and tuple literals.
We can replace the above tuples code sample with the code listed in Listing 8, where the TupleReturnLiteral method returns a tuple type of three values.
// tuple return type
public(string, string, long) TupleReturnLiteral(long id) {
string name = string.Empty;
string title = string.Empty;
long year = 0;
if (id == 1000) {
name = "Mahesh Chand";
title = "ADO.NET Programming";
year = 2003;
}
// tuple literal
return (name, title, year);
}
Listing 8.
The code listed in Listing 9 calls the above TupleReturnLiternal method and returns a tuple variable. The code reads the tuple values using Item1, Item2, and Item3 of the tuple and displays the values on the console.
TupleSamples ts = new TupleSamples();
var author = ts.TupleReturnLiteral(1000);
Console.WriteLine($"Author {author.Item1} {author.Item2} {author.Item3} ");
Listing 9.
To make the above code more readable, we can name the tuple return type values. The code snippet in Listing 10 changes the method signature by giving the tuple type values names.
// tuple return type
public(string name, string title, long year) TupleReturnLiteral(long id) {
string name = string.Empty;
string title = string.Empty;
long year = 0;
if (id == 1000) {
name = "Mahesh Chand";
title = "ADO.NET Programming";
year = 2003;
}
// tutle literal
return (name, title, year);
}
Listing 10.
The code snippet in Listing 11 calls the method listed in Listing 10. As you can see from Listing 11, the tuple values can be accessed using the tuple variable names.
TupleSamples ts = new TupleSamples();
var author = ts.TupleReturnLiteral(1000);
Console.WriteLine($"Author {author.name} {author.title} {author.year} ");
Listing 11.
Summary
C# tuple is a new data type added in C# 7.0 or later versions. This article thought you how to create and use tuples in C#.
Next C# 7.0 Feature >> Out Variable In C# 7.0