public static TResult Merge <TResult>(params ResultBase[] results) where TResult : ResultBase <TResult>, new() { var finalResult = new TResult(); foreach (var result in results) { foreach (var reason in result.Reasons) { finalResult.WithReason(reason); } } return(finalResult); }