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 }