Деконструкция
Деконструкция записывает части значения в список
переменных слева от =. Для кортежа
пишут (int a, int b) = (1, 2). Свой
тип может объявить метод Deconstruct
с параметрами out,
и тогда деконструкция работает так же, как
для встроенного кортежа.
Синтаксис
(тип1 имя1, тип2 имя2) = значение;
(тип1 имя1, тип2 имя2) = объект;
Пример
Давайте разберём кортеж из двух чисел на
переменные a и b:
using System;
class Program
{
static void Main()
{
(int a, int b) = (1, 2);
Console.WriteLine($"{a} {b}");
}
}
Результат выполнения кода:
1 2
Пример
Давайте обменяем местами значения через деконструкцию кортежа:
using System;
class Program
{
static void Main()
{
int x = 1;
int y = 2;
(x, y) = (y, x);
Console.WriteLine($"{x} {y}");
}
}
Результат выполнения кода:
2 1
Пример
Давайте деконструируем объект с методом
Deconstruct:
using System;
class Box
{
public int Width { get; }
public int Height { get; }
public Box(int width, int height)
{
Width = width;
Height = height;
}
public void Deconstruct(out int width, out int height)
{
width = Width;
height = Height;
}
}
class Program
{
static void Main()
{
var box = new Box(3, 4);
(int w, int h) = box;
Console.WriteLine($"{w} {h}");
}
}
Результат выполнения кода:
3 4
Пример
Давайте возьмём из кортежа только первое значение, а второе отбросим:
using System;
class Program
{
static void Main()
{
(int first, _) = (10, 20);
Console.WriteLine(first);
}
}
Результат выполнения кода:
10
Смотрите также
-
отбрасывание,
которое игнорирует ненужную часть -
выражение
with,
которое копирует запись с заменой полей -
модификатор
out,
который нужен в методеDeconstruct -
оператор
foreach,
который перебирает элементы по одному