There are cases in practice when we need a method to return more than one element as a result. For this to be possible ValueTuple
has been integrated in Visual Studio and C# (C# 7 and later versions), as well as a literal of ValueTuple
type. The ValueTuple
type represents two values, which allow the temporary containing of multiple values. The values are contained in variables (fields – we will learn about them later) of the corresponding types. Although the type Tuple
existed before C# 7, it didn't have good support in the older versions and it's ineffective. That's why in previous versions of C# the elements in one Tuple
were shown as Item1
, Item2
etc. and the names of their variables (the variables in which they are contained) could not be changed. In C# 7 the type (ValueTuple
) is maintained, which allows giving meaningful names to the elements in a ValueTuple
.
Let's examine an example declaring of a variable of ValueTuple
type:
var personInfo = (name: "Steve", age: 27, "Bulgaria");
To make it easier when declaring, we use the keyword var
, and in the brackets we list the names of the values we want, followed by the values themselves. Let's see what the variable personInfo
contains in debug mode:
We can see that it contains several fields with names and values, which were given when initializing the variable. We can see that the last variable is called Item3
. This is so because when initializing we haven't named the variable, which contains the value "Bulgaria". In this case the naming is by default, i.e. the variables are named Item1
, Item2
, Item3
, etc.
The following method takes as parameters two integers (x
and y
) and returns two values – the result of integer division and the remainder:
static (int result, int reminder) Divide(int x, int y)
{
int result = x / y;
int reminder = x % y;
return (result, reminder);
}
This method returns a result of ValueTuple
type, containing two variables (fields) of int
type, named result
and reminder
respectively. Calling the method is done in the following way:
var division = Divide(1, 3);
In order to get the results returned from the method, we apply point notation to the variable division
, as it is shown on the example below:
var division = Divide(1, 3);
int res = division.result;
int rem = division.reminder;
To simplify the developers, Visual Studio implements auto-complete for tuples, returned from a method, just as it can be expected: