private void OnTransformersAsFuncClick(object sender, RoutedEventArgs e)
        {
            Delegates.Transformer <int> t = new Delegates.Transformer <int>(SquareFunc);
            t += new Delegates.Transformer <int>(CubicFunc);

            Transform(ParamXs.ToArray(), t);
        }
        private void OnTransformerClick(object sender, RoutedEventArgs e)
        {
            // => Delegates.Transformer t = Square;
            Delegates.Transformer <int> t = new Delegates.Transformer <int>(Square);

            // = > int result = t( ParamX );
            int result = t.Invoke(ParamX);

            TransformedX = result;
        }
        private void Transform <T>(T[] values, Delegates.Transformer <T> t) where T : struct
        {
            if (TransformedXs == null)
            {
                TransformedXs = new IntegerCollection();
            }
            else
            {
                TransformedXs.Clear();
            }

            if (AnotherTransformedXs == null)
            {
                AnotherTransformedXs = new IntegerCollection();
            }
            else
            {
                AnotherTransformedXs.Clear();
            }

            int[][] temp = new int[t.GetInvocationList().Length][];

            for (int i = 0; i < t.GetInvocationList().Length; ++i)
            {
                temp[i] = new int[values.Length];

                Parallel.For(0, values.Length, j =>
                {
                    var tempDelegate = t.GetInvocationList()[i];
                    temp[i][j]       = (int)tempDelegate.DynamicInvoke(j);
                });
            }

            for (int i = 0; i < t.GetInvocationList().Length; ++i)
            {
                if (i == 0)
                {
                    for (int j = 0; j < values.Length; ++j)
                    {
                        TransformedXs.Add(new SoleParameterInteger {
                            X = temp[i][j]
                        });
                    }
                }
                else if (i == 1)
                {
                    for (int j = 0; j < values.Length; ++j)
                    {
                        AnotherTransformedXs.Add(new SoleParameterInteger {
                            X = temp[i][j]
                        });
                    }
                }
            }
        }