Introduction to C#7 tuples in readiness for C#8

Nick Raphael - Nov 7 '19 - - Dev Community

Who uses tuples? No? Well, I can’t say I really use them either. But that’s likely to change in c#8. Once I get my whole team over to vs2019 and migrate our code over to dotnet core 3 we can move to c#8. There are language changes in c#8 that are built upon the changes to tuples that were introduced in c#7. So tuples could become a regular occurrence in our code quite soon. So I’m going to give a brief primer on tuples as they exist in C#7.

Here is an example...

using System;

namespace MyConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello Stackathon readers!");

            var dimensions = getDimensions();

            Console.WriteLine($"Width is {dimensions.width}");
            Console.WriteLine($"Height is {dimensions.height}");
            Console.WriteLine($"Depth is {dimensions.depth}");

            Console.Read();
        }

        private static (double width, double height, double depth) getDimensions()
        {
            return (2.3, 10.4, 4.6);
        }
    }
}

Enter fullscreen mode Exit fullscreen mode

Our dimensions variable in Main() is a tuple. The variable has properties for width, height and depth which are available in intellisense. We can think of it as a lightweight object that saves us the effort of defining a class or struct.

We can also deconstruct our tuple into a new tuple like so...

(double width, double height, double depth) localTuple = getDimensions();
Enter fullscreen mode Exit fullscreen mode

But be aware that the order of your tuple fields is import here - it's mapped by position. If you switch height and width, the mapping will be wrong. Better to just use a var.

var dimensions = getDimensions();
Enter fullscreen mode Exit fullscreen mode

We can also do the following to give us three local variables with values from the tuple returned by getDimensions().

var (w, h, d) = getDimensions();
Enter fullscreen mode Exit fullscreen mode

This may not seem earth shattering. But this syntax was needed by some new features coming in C#8. Specifically in the area of pattern matching. More on that another time.

. . . . . . . . . . . . . . . . . . . . . . . . . .