/// <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); }
/// <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); } } }
/// <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;