|
|
От: | Jack128 | |
| Дата: | 10.11.22 08:44 | ||
| Оценка: | +3 | ||
S>Сопоставление шаблонов — это одна из постоянных историй в C #, которую мы просто продолжаем заполнять. Сопоставление с образцом было введено в C # 7, и с тех пор оно превратилось в одну из самых важных и мощных управляющих структур в языке.
S>C # 11 добавляет шаблоны списков в историю. С помощью шаблонов списков вы можете рекурсивно применять шаблоны к отдельным элементам ввода, подобного списку, или к их диапазону. Давайте сразу перейдем к описанному выше общему алгоритму, переписанному как рекурсивный метод с использованием шаблонов списков:
S>S>T AddAll<T>(params T[] elements) where T : IMonoid<T> =>
S> elements switch
S>{
S> [] => T.Zero,
S> [var first, ..var rest] => first + AddAll<T>(rest),
S>};
S>Там много чего происходит, но в центре находится выражение switch с двумя падежами. Один случай возвращает ноль для пустого списка[], где Zeroопределяется интерфейсом. В другом случае первый элемент извлекается firstс var firstпомощью шаблона, а оставшаяся часть извлекается с restпомощью.., чтобы вырезать все оставшиеся элементы в var restшаблоне.
S>Подробнее о шаблонах списков читайте в документации. https://learn.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/patterns#list-patterns