Слияние кода завершено, страница обновится автоматически
Расширение методов для pattern matching в C#6
"foo"
.Match<int>(x => Console.WriteLine($"int {x}"))
.Match<string>(x => Console.WriteLine($"string {x}"))
.Match<object>(x => Console.WriteLine($"object {x}"))
;
new { a = 1, b = 2 }
.Match<string, int>((x1, x2) => Console.WriteLine($"<{string}, {int}> {x1} {x2}"))
.Match<int, int>((x1, x2) => Console.WriteLine($"<{int}, {int}> {x1} {x2}"))
;
var len = new Function<IList<int>, int>()
.Match(list => list.IsEmpty(), self => list => 0)
.Match(list => true, self => list => list.Match((x, xs) => self.Invoke(xs) + 1))
.ToFunc()
;
len(new List<int> { 1, 2, 3, 4, 5 }).Println();
var fib = new Function<int, int>()
.Match(x => x == 0, self => x => 0)
.Match(x => x == 1, self => x => 1)
.Match(x => x > 1, self => x => self.Invoke(x - 1) + self.Invoke(x - 2))
.Match(_ => true, self => _ => { throw new ArgumentOutOfRangeException(nameof(_)); })
.ToFunc()
;
$"fib(10) = {fib(10)}".Println();
Обратите внимание, что в последнем примере синтаксис <string>
и <int>
был изменён на _
для корректного отображения в контексте C#.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )