Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static class MaybeExtensions
- {
- public static Maybe<T> ToMaybe<T>(this T input) where T : class
- {
- return new Maybe<T>(input);
- }
- public static Maybe<TResult> Get<TInput, TResult>(this Maybe<TInput> maybe, Func<TInput, TResult> func)
- where TInput : class
- where TResult : class
- {
- var result = maybe.HasValue ? new Maybe<TResult>(func(maybe.Value)) : Maybe<TResult>.None;
- return result;
- }
- public static Maybe<TInput> If<TInput>(this Maybe<TInput> maybe, Func<TInput, bool> func) where TInput : class
- {
- return maybe.HasValue && func(maybe.Value)
- ? maybe
- : Maybe<TInput>.None;
- }
- public static TResult Return<TInput, TResult>(this Maybe<TInput> maybe, Func<TInput, TResult> func, TResult defaultValue) where TInput : class
- {
- return maybe.HasValue
- ? func(maybe.Value)
- : defaultValue;
- }
- }
- public sealed class Maybe<T> where T : class
- {
- public static Maybe<T> None = new Maybe<T>(default(T));
- public T Value { get; set; }
- public bool HasValue
- {
- get { return Value != null && !Value.Equals(default(T)); }
- }
- public Maybe(T value)
- {
- Value = value;
- }
- }
Add Comment
Please, Sign In to add comment