# Func and Action

suggest change**Func** provides a holder for parameterised anonymous functions. The leading types are the inputs and the last type is always the return value.

// square a number. Func<double, double> square = (x) => { return x * x; }; // get the square root. // note how the signature matches the built in method. Func<double, double> squareroot = Math.Sqrt; // provide your workings. Func<double, double, string> workings = (x, y) => string.Format("The square of {0} is {1}.", x, square(y))

**Action** objects are like void methods so they only have an input type. No result is placed on the evaluation stack.

// right-angled triangle. class Triangle { public double a; public double b; public double h; } // Pythagorean theorem. Action<Triangle> pythagoras = (x) => x.h = squareroot(square(x.a) + square(x.b)); Triangle t = new Triangle { a = 3, b = 4 }; pythagoras(t); Console.WriteLine(t.h); // 5.

Found a mistake? Have a question or improvement idea?
Let me know.

Table Of Contents