What is Func<> and what is it used for?
Maybe it is not too late to add some info.
Sum:
The Func is a custom delegate defined in System namespace that allows you to point to a method with the same signature (as delegates do), using 0 to 16 input parameters and that must return something.
Nomenclature & how2use:
Func<input_1, input_2, ..., input1_6, output> funcDelegate = someMethod;
Definition:
public delegate TResult Func<in T, out TResult>(T arg);
Where it is used:
It is used in lambda expressions and anonymous methods.
Both C# and Java don't have plain functions only member functions (aka methods). And the methods are not first-class citizens. First-class functions allow us to create beautiful and powerful code, as seen in F# or Clojure languages. (For instance, first-class functions can be passed as parameters and can return functions.) Java and C# ameliorate this somewhat with interfaces/delegates.
Func<int, int, int> randInt = (n1, n2) => new Random().Next(n1, n2);
So, Func is a built-in delegate which brings some functional programming features and helps reduce code verbosity.
Aforementioned answers are great, just putting few points I see might be helpful:
Func is built-in delegate type
Func delegate type must return a value. Use Action delegate if no return type needed.
Func delegate type can have zero to 16 input parameters.
Func delegate does not allow ref and out parameters.
Func delegate type can be used with an anonymous method or lambda expression.
Func<int, int, int> Sum = (x, y) => x + y;