Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
39 of 1492 menu
◀ ▶

Выражение with

Выражение with применяют к типам record и record struct. Оно строит новый экземпляр на основе существующего и подставляет указанные значения свойств. Исходная переменная остаётся прежней - меняется только результат выражения.

Синтаксис

запись with { ИмяСвойства = значение, ... }

Пример

Давайте изменим координату X у записи Point и сравним оба экземпляра:

using System; record Point(int X, int Y); class Program { static void Main() { Point p = new(1, 2); Point res = p with { X = 3 }; Console.WriteLine($"{p.X} {p.Y}"); Console.WriteLine($"{res.X} {res.Y}"); } }

Результат выполнения кода:

1 2 3 2

Пример

Давайте применим with к record struct и изменим поле Y:

using System; record struct Size(int Width, int Height); class Program { static void Main() { Size src = new(10, 20); Size res = src with { Height = 25 }; Console.WriteLine($"{src.Width} {src.Height}"); Console.WriteLine($"{res.Width} {res.Height}"); } }

Результат выполнения кода:

10 20 10 25

Пример

Давайте заменим сразу несколько свойств в одном выражении:

using System; record Point(int X, int Y); class Program { static void Main() { Point p = new(1, 2); Point res = p with { X = 5, Y = 4 }; Console.WriteLine($"{res.X} {res.Y}"); } }

Результат выполнения кода:

5 4

Пример

Давайте сохраним копию в переменную и выведем строковое представление записи:

using System; record Point(int X, int Y); class Program { static void Main() { Point p = new(1, 2); Point res = p with { X = 3 }; Console.WriteLine(res); } }

Результат выполнения кода:

"Point { X = 3, Y = 2 }"

Смотрите также

  • деконструкция,
    которая разбирает запись на части
  • оператор new,
    который создаёт экземпляр типа
  • ключевое слово var,
    которое выводит тип переменной
  • оператор is,
    который проверяет тип значения
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить