3.22. Returning Multiple Items from a Method

Problem

In many cases, a single return value for a method is not enough. You need a way to return more than one item from a method.

Solution

Use the out keyword on parameters that will act as return parameters. The following method accepts an inputShape parameter and calculates height, width, and depth from that value:

public void ReturnDimensions(int inputShape, 
                             out int height, 
                             out int width, 
                             out int depth)
{
    height = 0;
    width = 0;
    depth = 0;

    // Calculate height, width, depth from the inputShape value
}

This method would be called in the following manner:

// Declare output parameters
int height;
int width;
int depth;

// Call method and return the height, width, and depth
Obj.ReturnDimensions(1, out height, out width, out depth);

Another method is to return a class or structure containing all the return values. The previous method has been modified to return a structure instead of using out arguments:

public Dimensions ReturnDimensions(int inputShape)
{
    // The default ctor automatically defaults this structure's members to 0
    Dimensions objDim = new Dimensions( );

    // Calculate objDim.Height, objDim.Width, objDim.Depth from the inputShape value

    return (objDim);
}

where Dimensions is defined as follows:

public struct Dimensions
{
    int Height;
    int Width;
    int Depth;
}

This method would now be called in this manner:

// Call method and return the Height, Width, and Depth
Dimensions objDim = obj.ReturnDimensions(1);

Discussion

Marking a parameter in a method ...

Get C# Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.