From 2963c015b07a88958149ab37f515b4912c2dae41 Mon Sep 17 00:00:00 2001 From: Laurence Hartgill Date: Tue, 13 Sep 2016 15:46:50 +0100 Subject: [PATCH] Add Func<> equivalent to Execute Action<> Maybe extension --- .../MaybeTests/ExtensionsTests.cs | 9 +++++++++ CSharpFunctionalExtensions/MaybeExtensions.cs | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/CSharpFunctionalExtensions.Tests/MaybeTests/ExtensionsTests.cs b/CSharpFunctionalExtensions.Tests/MaybeTests/ExtensionsTests.cs index 935570f7..217170e5 100644 --- a/CSharpFunctionalExtensions.Tests/MaybeTests/ExtensionsTests.cs +++ b/CSharpFunctionalExtensions.Tests/MaybeTests/ExtensionsTests.cs @@ -156,6 +156,15 @@ public void Execute_executes_action() property.Should().Be("Some value"); } + [Fact] + public void Execute_returns_func_result() + { + Maybe maybe = new MyClass { Property = "Some value" }; + + string property = maybe.Execute(x => x.Property); + + property.Should().Be("Some value"); + } private static Maybe GetPropertyIfExists(MyClass myClass) { diff --git a/CSharpFunctionalExtensions/MaybeExtensions.cs b/CSharpFunctionalExtensions/MaybeExtensions.cs index e890f8ae..47e0ea9e 100644 --- a/CSharpFunctionalExtensions/MaybeExtensions.cs +++ b/CSharpFunctionalExtensions/MaybeExtensions.cs @@ -69,5 +69,14 @@ public static void Execute(this Maybe maybe, Action action) action(maybe.Value); } + + public static TOut Execute(this Maybe maybe, Func func) + where T : class + { + if (maybe.HasNoValue) + return default(TOut); + + return func(maybe.Value); + } } }