Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
list.Add("John Doe", 66); // Такое добавление данных в лист не может не радовать
list.Add(new Person
{
Name = "John Doe",
Age = 66
});
(i, j, k) = (a, b, c);
(i, j, k) += 100;
если нужно вернуть просто два значения, никак не связанных между собой
Магазину «Котлеты и Ноутбуки» срочно требуется определиться
Cutlet GetCutletAndNotebook(out Notebook nb)
Таких котлет и ноутбуков — вагон и тележка.
Обычай предписывает использовать для этого out-параметры
В С++ есть функции, возвращающие пару — например, итератор и флажок при вставке в set.
Предложите, как пересмотреть ответственности для них.
(i, j, k) += 100;
IEnumerable<T>. В кортеже все типы могут быть разные и абсолютно непонятно, что тогда должен делать такой оператор.1) Либо один большой говнометод
2) Много непонятных data-классов, которые нужны только в пределах двух-трех методов
3) Либо код будет содержать Tuple/KeyValuePair, что вообще читабельности не добавляет.
вы посчитали, что «вот эта сущность» недостаточно важна, чтобы вводить её в явном виде, и ввели неявно
Вы считаете, что если сущность шарится между методами, то она важна.
Вы правда мне предлагаете выделять новый тип данных?
А если я начну городить больше кода, больше типов, больше классов, то он станет нечитабельным
(var sum, var count) = Tally(myValues); // deconstruct result
Console.WriteLine($"Sum: {sum}, count: {count}");
var list = new List<(int X, int Y)>();
list.Add((1, 2));
list[0].X = 2; // ошибка: потеряли lvalue
List<T> — это присыпанная синтаксическим сахаром функция. Из нее возвращается копия структуры, поэтому лежащее в списке значение не может быть изменено присваиванием. С массивом ситуация обстоит по-другому: там индексатор реализован с помощью отдельной инструкции, позволяющей обратиться непосредственно к объекту по адресу.
Что нам готовит C# 7 (Часть 1. Кортежи)