Параметр out отлично подходит, когда нужно вернуть только несколько значений,
но когда вы начинаете встречать 4, 5, 6 или более значений, которые должны быть возвращены, это
может стать громоздким. Другой вариант возврата нескольких значений - создать и вернуть
пользовательский класс / структура или использование кортежа для упаковки всех значений, которые необходимы
должен быть возвращен методом.
Первый вариант, использующий класс / структуру для возврата значений, прост. Просто
создайте тип (в данном примере это структура) примерно так:
public struct Dimensions
{
public int Height;
public int Width;
public int Depth;
}
Второй вариант, использующий кортеж, является еще более элегантным решением, чем использование пользовательских
объект. Кортеж может быть создан для хранения любого числа значений различных типов.
Кроме того, данные, которые вы храните в кортеже, являются неизменными; как только вы добавите данные в
кортеж через конструктор или статический метод Create, эти данные не могут быть
изменилось.
Кортежи могут принимать до восьми различных значений. Если вам нужно вернуться
более восьми значений, вам нужно будет использовать специальный класс Tuple:
Класс Tuple
При создании кортежа с более чем восемью значениями вы не можете использовать статический Create
метод - вместо этого вы должны использовать конструктор класса. Вот как бы вы
создать кортеж из 10 целых значений:
var values = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>> (
1, 2, 3, 4, 5, 6, 7, new Tuple<int, int, int> (8, 9, 10));
Конечно, вы можете продолжать добавлять больше кортежей в конец каждого встроенного кортежа,
создание Tuple любого размера.