| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace InABox.Core{    public interface IPostResult<TPostable>        where TPostable : IPostable    {        /// <summary>        /// All successful or failed <typeparamref name="TPostable"/>s.        /// </summary>        public IEnumerable<TPostable> PostedEntities { get; }        public IEnumerable<TPostable> SuccessfulEntities => PostedEntities.Where(x => x.PostedStatus == PostedStatus.Posted);        public IEnumerable<TPostable> FailedEntities => PostedEntities.Where(x => x.PostedStatus == PostedStatus.PostFailed);        public IEnumerable<KeyValuePair<Type, IEnumerable<IPostableFragment<TPostable>>>> Fragments { get; }    }    public class PostResult<TPostable> : IPostResult<TPostable>        where TPostable : IPostable    {        private List<TPostable> posts = new List<TPostable>();        private Dictionary<Type, List<IPostableFragment<TPostable>>> fragments = new Dictionary<Type, List<IPostableFragment<TPostable>>>();        /// <summary>        /// All successful or failed <typeparamref name="TPostable"/>s.        /// </summary>        public IEnumerable<TPostable> PostedEntities => posts;        public IEnumerable<KeyValuePair<Type, IEnumerable<IPostableFragment<TPostable>>>> Fragments =>             fragments.Select(x => new KeyValuePair<Type, IEnumerable<IPostableFragment<TPostable>>>(x.Key, x.Value));        public void AddSuccess(TPostable post)        {            post.Post();            posts.Add(post);        }        public void AddFailed(TPostable post, string note)        {            post.FailPost(note);            posts.Add(post);        }        public void AddFragment(IPostableFragment<TPostable> fragment)        {            var type = fragment.GetType();            if (!fragments.TryGetValue(type, out var fragmentsList))            {                fragmentsList = new List<IPostableFragment<TPostable>>();                fragments[type] = fragmentsList;            }            fragmentsList.Add(fragment);        }    }}
 |