public void Do(IDo o, Doer doer)
        {
            var type = o.GetType();

            if (type == typeof(A))
            {
                doer.Do((A)o);
            }
            else if (type == typeof(B))
            {
                doer.Do((B)o);
            }
            else if (type == typeof(C))
            {
                doer.Do((C)o);
            }
            else if (type == typeof(D))
            {
                doer.Do((D)o);
            }
            else if (type == typeof(E))
            {
                doer.Do((E)o);
            }
            else if (type == typeof(F))
            {
                doer.Do((F)o);
            }
        }
        public void Do(IDo o, Doer doer)
        {
            Action <Doer, object> actor;

            s_dict.TryGetValue(o.GetType(), out actor);
            actor(doer, o);
        }