Func ja Action

[info_box_1 title=”Huom.”]
Näissä esimerkeissä on käytetty lambda-lausekkeita.
[/info_box_1]

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

Func:ssa viimeinen tyyppiparametri (TResult) on varattu paluuarvolle.

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:ssa on vain input-tyyppiparametreja

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

Navigointi

Social Media