С # множественное присвоение

int a, b, n;
...
(a, b) = (2, 3);
// 'a' is now 2 and 'b' is now 3

Подобные вещи были бы действительно полезны в C #. В этом примере 'a' и 'b' не инкапсулируются вместе, как, например, X и Y позиции. Существует ли это в той или иной форме?

Ниже приводится менее тривиальный пример.

(a, b) = n == 4 ? (2, 3) : (3, n % 2 == 0 ? 1 : 2);

Адам Марас показывает в комментариях, что:

var result = n == 4 ? Tuple.Create(2, 3) : Tuple.Create(3, n % 2 == 0 ? 1 : 2);

Тип работает для приведенного выше примера, однако, как он затем указывает, он создает новый трупл вместо изменения указанных значений.

Эрик Липперт спрашивает о вариантах использования, поэтому возможно:

(a, b, c) = (c, a, b); // swap or reorder on one line
(x, y) = move((x, y), dist, heading);
byte (a, b, c, d, e) = (5, 4, 1, 3, 2);
graphics.(PreferredBackBufferWidth, PreferredBackBufferHeight) = 400;

notallama также имеет варианты использования, они приведены в его ответе ниже.

16
задан alan2here 3 December 2011 в 22:20
поделиться