/// <summary>
 /// If <paramref name="a"/>.Value is present, returns an enumerable of that single value, otherwise an empty one
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <returns></returns>
 public static IEnumerable <T> ToEnumerable <T>(this Maybe <T> a)
 {
     if (a.IsSomething())
     {
         yield return(a.Value);
     }
 }
 /// <summary>
 /// Returns <paramref name="a"/> if its Value exists or returns <paramref name="b"/>
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static Maybe <T> Or <T>(this Maybe <T> a, Maybe <T> b)
 {
     if (a.IsSomething())
     {
         return(a);
     }
     return(b);
 }
Example #3
0
 /// <summary>
 /// Calls <paramref name="fn"/> if <paramref name="m"/> has value, otherwise does nothing
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="m"></param>
 /// <param name="fn"></param>
 /// <returns></returns>
 public static Maybe <T> Do <T>(this Maybe <T> m, Action <T> fn)
 {
     if (m.IsSomething())
     {
         fn(m.Value);
     }
     return(m);
 }
 /// <summary>
 /// Returns <paramref name="a"/> if its Value exists or returns <paramref name="b"/>()
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static Maybe <T> Or <T>(this Maybe <T> a, Func <Maybe <T> > b)
 {
     if (a.IsSomething())
     {
         return(a);
     }
     return(b());
 }
 /// <summary>
 /// Returns <paramref name="a"/> if its Value exists or returns <paramref name="b"/>, wrapped as Maybe
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static Maybe <T> Or <T>(this Maybe <T> a, T b)
 {
     if (a.IsSomething())
     {
         return(a);
     }
     return(b.ToMaybe());
 }
 /// <summary>
 /// Calls <paramref name="fn"/> if <paramref name="m"/> has value and predicate <paramref name="predicate"/> is true, otherwise does nothing
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="m"></param>
 /// <param name="fn"></param>
 /// <returns></returns>
 public static void DoWhenTrue <T>(this Maybe <T> m, Func <T, bool> predicate, Action <T> fn)
 {
     Contract.Requires(predicate != null);
     if (m.IsSomething())
     {
         if (predicate(m.Value))
         {
             fn(m.Value);
         }
     }
 }
Example #7
0
 /// <summary>
 /// Calls <paramref name="fn"/> if <paramref name="m"/> has value, otherwise calls <paramref name="else"/>
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="m"></param>
 /// <param name="fn"></param>
 /// <param name="else"></param>
 /// <returns></returns>
 public static Maybe <T> Match <T>(this Maybe <T> m, Action <T> fn, Action @else)
 {
     if (m.IsSomething())
     {
         fn(m.Value);
     }
     else
     {
         @else();
     }
     return(m);
 }
 /// <summary>
 /// Converts Maybe to corresponding Nullable
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <returns></returns>
 public static T?ToNullable <T>(this Maybe <T> a) where T : struct
 {
     return(a.IsSomething() ? a.Value : new T?());
 }
 public static bool IsNothing <T>(this Maybe <T> a) => !a.IsSomething();
 /// <summary>
 /// Returns <paramref name="a"/> if its Value exists or returns <paramref name="b"/>
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static Maybe <T> Or <T>(this Maybe <T> a, Maybe <T> b) => a.IsSomething() ? a : b;
 /// <summary>
 /// Returns <paramref name="a"/> if its Value exists or returns <paramref name="b"/>()
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static Maybe <T> Or <T>(this Maybe <T> a, Func <Maybe <T> > b) =>
 a.IsSomething() ? a : b();
 /// <summary>
 /// Returns <paramref name="a"/> if its Value exists or returns <paramref name="b"/>, wrapped as Maybe
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static Maybe <T> Or <T>(this Maybe <T> a, T b) =>
 a.IsSomething() ? a : b.ToMaybe();
 /// <summary>
 /// Converts Maybe to corresponding Nullable
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <returns></returns>
 public static T?ToNullable <T>(this Maybe <T> a) where T : struct =>
 a.IsSomething() ? a.Value : (T?)null;