Выражение 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,
который проверяет тип значения