/// <summary> /// Executes current chain of circumstances. /// </summary> /// <returns>Chain result.</returns> public TResult Execute() { if (_thrownExceptions.Any()) { _thrownExceptions.Clear(); } LinkedListNode <Circumstance> current = _circumstances.First; while (current != null) { Circumstance circumstance = current.Value; try { #pragma warning disable S1751 return(circumstance.GetResult()); #pragma warning restore S1751 } catch (Exception e) { bool isConditionFailed = e is Circumstance.ConditionFailedException; if (!isConditionFailed) { _thrownExceptions.Add(e.InnerException); } current = current.Next; } } return(default(TResult)); }