Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю - Страница 103
- Предыдущая
- 103/642
- Следующая
var (first, _, last) = SplitNames("Philip F Japikse");Console.WriteLine($"{first}:{last}");Значение, соответствующее отчеству, в кортеже отбрасывается.
Использование выражений switch с сопоставлением с образцом для кортежей (нововведение в версии 8.0)
Теперь, когда вы хорошо разбираетесь в кортежах, самое время возвратиться к примеру выражения
switch// Выражения switch с кортежамиstatic string RockPaperScissors(string first, string second){ return (first, second) switch { ("rock", "paper") => "Paper wins.", ("rock", "scissors") => "Rock wins.", ("paper", "rock") => "Paper wins.", ("paper", "scissors") => "Scissors wins.", ("scissors", "rock") => "Rock wins.", ("scissors", "paper") => "Scissors wins.", (_, _) => "Tie.", };}В этом примере два параметра преобразуются в кортеж, когда передаются выражению
switchswitchСигнатуру метода
RockPaperScissors()static string RockPaperScissors( (string first, string second) value){ return value switch { // Для краткости код не показан };}Деконструирование кортежей
Деконструирование является термином, описывающим отделение свойств кортежа друг от друга с целью применения по одному. Именно это делает метод
FillTheseValues()Возьмем укороченную версию структуры
PointDeconstruct()PointXPosYPosstruct Point{ // Поля структуры. public int X; public int Y; // Специальный конструктор. public Point(int XPos, int YPos) { X = XPos; Y = YPos; }<b> public (int XPos, int YPos) Deconstruct() => (X, Y);</b>}Новый метод
Deconstruct()Deconstruct()Point p = new Point(7,5);var pointValues = p.Deconstruct();Console.WriteLine($"X is: {pointValues.XPos}");Console.WriteLine($"Y is: {pointValues.YPos}");Деконструирование кортежей с позиционным сопоставлением с образцом (нововведение в версии 8.0)
Когда кортежи имеют доступный метод
Deconstruct()switchPointwhenswitchstatic string GetQuadrant1(Point p){ return p.Deconstruct() switch { (0, 0) => "Origin", var (x, y) when x > 0 && y > 0 => "One", var (x, y) when x < 0 && y > 0 => "Two", var (x, y) when x < 0 && y < 0 => "Three", var (x, y) when x > 0 && y < 0 => "Four", var (_, _) => "Border", };}Если метод
Deconstruct()outswitchPointPointDeconstruct()- Предыдущая
- 103/642
- Следующая
