| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | namespace Caliburn.Micro.Core {    using System;    /// <summary>    /// Extension methods for <see cref="IResult"/> instances.    /// </summary>    public static class ResultExtensions {        /// <summary>        /// Adds behavior to the result which is executed when the <paramref name ="result"/> was cancelled.        /// </summary>        /// <param name="result">The result to decorate.</param>        /// <param name="coroutine">The coroutine to execute when <paramref name="result"/> was canceled.</param>        /// <returns></returns>        public static IResult WhenCancelled(this IResult result, Func<IResult> coroutine) {            return new ContinueResultDecorator(result, coroutine);        }        /// <summary>        /// Overrides <see cref="ResultCompletionEventArgs.WasCancelled"/> of the decorated <paramref name="result"/> instance.        /// </summary>        /// <param name="result">The result to decorate.</param>        /// <returns></returns>        public static IResult OverrideCancel(this IResult result) {            return new OverrideCancelResultDecorator(result);        }        /// <summary>        /// Rescues <typeparamref name="TException"/> from the decorated <paramref name="result"/> by executing a <paramref name="rescue"/> coroutine.        /// </summary>        /// <typeparam name = "TException">The type of the exception we want to perform the rescue on.</typeparam>        /// <param name="result">The result to decorate.</param>        /// <param name="rescue">The rescue coroutine.</param>        /// <param name="cancelResult">Set to true to cancel the result after executing rescue.</param>        /// <returns></returns>        public static IResult Rescue<TException>(this IResult result, Func<TException, IResult> rescue,            bool cancelResult = true)            where TException : Exception {            return new RescueResultDecorator<TException>(result, rescue, cancelResult);        }        /// <summary>        /// Rescues any exception from the decorated <paramref name="result"/> by executing a <paramref name="rescue"/> coroutine.        /// </summary>        /// <param name="result">The result to decorate.</param>        /// <param name="rescue">The rescue coroutine.</param>        /// <param name="cancelResult">Set to true to cancel the result after executing rescue.</param>        /// <returns></returns>        public static IResult Rescue(this IResult result, Func<Exception, IResult> rescue,            bool cancelResult = true) {            return Rescue<Exception>(result, rescue, cancelResult);        }    }}
 |