From 115d6766a536e33046cdbe252b0254cf3e83a4a1 Mon Sep 17 00:00:00 2001 From: Sanchime Date: Tue, 3 May 2022 11:13:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BAOption=E6=89=A9=E5=B1=95Linq?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sanchime.Functional/Core/Extensions/Option.cs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Sanchime.Functional/Core/Extensions/Option.cs b/Sanchime.Functional/Core/Extensions/Option.cs index 18e99dd..d44b6cb 100644 --- a/Sanchime.Functional/Core/Extensions/Option.cs +++ b/Sanchime.Functional/Core/Extensions/Option.cs @@ -77,6 +77,22 @@ public static class OptionExtension public static Option OrElse(this Option left, Func> right) => left.Match(() => right(), (_) => left); + #region Linq式 + + public static Option Select(this Option source, Func mapping) + => source.Map(mapping); + + public static Option Where(this Option source, Func predicate) + => source.Match(() => Option.None, (val) => predicate(val) ? source : Option.None); + + public static Option SelectMany(this Option source, Func> binding, Func project) + => source.Match( + None: () => Option.None, + Some: (val) => binding(val).Match( + None: () => Option.None, + Some: (res) => Option.Some(project(val, res)))); + + #endregion }