Tuples In C#

C# tuple is a data structure in C#. In this article, learn how to use tuples in C#. Tuples in C# are used to return multiple data values. 

If you need to return multiple values from a method in C#, there are three ways to do so without using tuples. 

  1. Using 0ut parameters
  2. Using a class, struct, or a record type
  3. Anonymous types returned through a dynamic return type 

In C#, Tuples solve this problem. C# tuple is a data structure that provides an easy way to represent a single set of data. The System.Tuple class provides static methods to create tuple objects.

Tuples allow us to,

  • Create, access, and manipulate a data set
  • Return a data set from a method without using the out parameter
  • Pass multiple values to a method through a single parameter 

C# Tuple

We can create a Tuple<> using its constructor or the "Create" method. The code snippet in Listing 1 creates a 3-tuple using a constructor. The tuple is a set of three data types, including two strings and one int, that represents an author's name, book title, and year of publication.

// Create a 3-tuple  
var author = new Tuple<string, string, int>("Mahesh Chand", "ADO.NET Programming", 2003);  

 // Display author info  
System.Console.WriteLine("Author {0} wrote his first book titled {1} in {2}.", author.Item1, author.Item2, author.Item3);   
Listing 1.

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


Similar Articles
Mindcracker
Founded in 2003, Mindcracker is the authority in custom software development and innovation. We put best practices into action. We deliver solutions based on consumer and industry analysis.