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] }); } } } }