Это, очевидно, новый синтаксис. И да, меня это тоже сбивает с толку.
var (availableItems, preorderItems) = await order.GetDifferentiatedProductDataAsync<OrderItemData>(_sort, _products);
Это объявляет две переменные - var availableItems
и var preorderItems
.
order.GetDifferentiatedProductDataAsync<OrderItemData>(_sort, _products);
, очевидно, возвращает два значения в кортеж. Но работать с кортежами раздражает напрямую. Поэтому вместо этого присваивание разделяет значения этого кортежа по этим двум переменным.
Согласно ссылке Дмитрия, вы "деконструируете" кортеж, который возвращает order.GetDifferentiatedProductDataAsync<OrderItemData>(_sort, _products);
, разбивая его на две нормальные переменные, с которыми вы можете легко работать с.
Я предполагаю, что эквивалент будет:
var temp = await order.GetDifferentiatedProductDataAsync<OrderItemData>(_sort, _products);
var availableItems = temp.Item1;
var preorderItems = temp.Item2;
Item1, Item2 и т.п. всегда действительны для адресации указанных полей c кортежа в порядке объявления. Именование полей для кортежей было на самом деле более поздним дополнением и совершенно необязательно.