Func ja Action ovat erityisiä geneerisiä delegaatteja, joita voi käyttää sen sijaan, että määrittelisi oman delegaatin. Niille voi antaa 0-16 parametria. Func:n ja Action:in ero on siinä, että Func palauttaa arvon, mutta Action ei. Input-tyyppiparametrit (T,T1,T2) korvataan halutuilla tietotyypeillä.
Func<out TResult>
Func<in T, out TResult>
Func<in T1, in T2, out TResult>
...
Func<in T1, in T2,in T3,in T4, in T5, in T6, in T7, in T8, in T9, in T10, out TResult>
...
Esimerkiksi func, joka palauttaa yhden int-arvon
Func<int> annaRandom = () =>
{
Random r = new Random();
return r.Next();
};
int luku = annaRandom();
Tai func, joka palauttaa tietyn merkin paikan tekstissä
// palauttaa merkin indeksin tekstissä
Func<string,char,int> indeksi = (string teksti,char merkki) =>
{
return teksti.IndexOf(merkki);
};
int ekaVali = indeksi("Hello World!", ' '); // 5
Action
Action<in T>
Action<in T1, in T2>
...
Action<in T1, in T2,in T3,in T4, in T5, in T6, in T7, in T8, in T9, in T10>
...
Action, joka ei ota parametria
// luodaan action
Action moikkaa = () =>
{
Console.WriteLine("Hello World!");
};
// kutsutaan sitä
moikkaa();
Action, joka ottaa erityyppisiä parametreja
// action, joka ottaa eri tyyppisiä muuttujia ja tulostaa ne
Action<bool, int, char, string> tulosta = (bool b, int i, char c, string s) =>
{
Console.WriteLine("{0} {1} {2} {3}",b,i,c,s);
};
// kutsutaan actionia
tulosta(true, 123, 'a', "teksti"); // true 123 a teksti