Zastanawiam się, czy ktoś może wyjaśnić, co to jest Func<int, string>
i jak jest on używany z jasnymi przykładami.Wyjaśnienie Func
Odpowiedz
Czy jesteś zaznajomiony z delegatów w ogóle? Mam stronę o delegates and events, która może pomóc, jeśli nie, chociaż jest bardziej nastawiona na wyjaśnienie różnic między tymi dwoma.
Func<T, TResult>
jest tylko ogólna delegat - wypracować, co to znaczy w każdej konkretnej sytuacji przez zastąpienie parametrów typu (T
i TResult
) z odpowiednim argumentów typu (int
i string
) w deklaracji. Ja również przemianowano go, aby uniknąć nieporozumień:
string ExpandedFunc(int x)
Innymi słowy, Func<int, string>
jest delegatem, który reprezentuje funkcję bierze się int
argument i przekazujących string
.
Func<T, TResult>
jest często używany w LINQ, zarówno dla prognoz i predykatów (w tym ostatnim przypadku, TResult
jest zawsze bool
). Na przykład można użyć obiektu Func<int, string>
do wyświetlenia sekwencji liczb całkowitych w ciągi znaków. lambda wyrażenia są zwykle używane w LINQ do stworzenia odpowiednich delegatów:
Func<int, string> projection = x => "Value=" + x;
int[] values = { 3, 7, 10 };
var strings = values.Select(projection);
foreach (string s in strings)
{
Console.WriteLine(s);
}
Wynik:
Value=3
Value=7
Value=10
Jest to delegat, który przyjmuje jeden parametr int
jako parametr i zwraca wartość typu string
.
Oto przykład jej użycia:
using System;
class Program
{
static void Main()
{
Func<Int32, String> func = bar;
// now I have a delegate which
// I can invoke or pass to other
// methods.
func(1);
}
static String bar(Int32 value)
{
return value.ToString();
}
}
Dzięki andrew. Czy chciałeś napisać func (1) zamiast paska (1)? – zSynopsis
Tak, zrobiłem!Dziękuję za poprawienie mnie! –
Func<int, string>
zjada ints i zwraca ciągi. Więc, co je ints i zwraca łańcuchy? Co powiesz na to ...
public string IntAsString(int i)
{
return i.ToString();
}
Tam właśnie wymyśliłem funkcję, która zjada ints i zwraca ciągi znaków. Jak tego użyć?
var lst = new List<int>() { 1, 2, 3, 4, 5 };
string str = String.Empty;
foreach(int i in lst)
{
str += IntAsString(i);
}
// str will be "12345"
Niezbyt seksowna, wiem, ale to prosty pomysł, na którym opiera się wiele sztuczek. Teraz zamiast tego użyjmy Func.
Func<int, string> fnc = IntAsString;
foreach (int i in lst)
{
str += fnc(i);
}
// str will be "1234512345" assuming we have same str as before
Zamiast wywoływać IntAsString na każdego członka, stworzyłem odniesienie do nazywany FNC (te odniesienia do metody nazywane są delegates) i że zamiast stosować. (Pamiętaj, fnc zjada ints i zwraca ciągi znaków).
Ten przykład nie jest bardzo sexy, ale mnóstwo sprytnych rzeczy, które zobaczysz, opiera się na prostym pomyśle funkcji, delegatów i extension methods.
Jednym z najlepszych primerów w tych rzeczach, które widziałem jest here. Ma o wiele więcej prawdziwych przykładów. :)
Podoba mi się to wyjaśnienie –
@Therealnapster też to lubię, ale bardziej lubię twoje imię. – BKSpurgeon
- 1. Wyjaśnienie wirtualnym stole
- 2. Wyjaśnienie NSLayoutAttribute
- 3. shutil.rmtree() wyjaśnienie
- 4. glVertexAttribPointer wyjaśnienie
- 5. Wyjaśnienie: register_shutdown_function
- 6. Wyjaśnienie ikona
- 7. onclick = "javascript: func()" w porównaniu z onclick = "func()"
- 8. Func <T>() vs Func <T>. Invoke()
- 9. Rekursja z Func
- 10. Func nie zwraca niczego?
- 11. Łączy dwa Func delegatów
- 12. func collectionViewContentSize w Swift3
- 13. Serialize Composed Func?
- 14. Utwórz wyrażenie z Func
- 15. Wyjaśnienie do Android Xfermode
- 16. Dalsze wyjaśnienie dotyczące IntentService
- 17. Wyjaśnienie działania spisu?
- 18. Wyjaśnienie witryny wywoławczej?
- 19. Podkreślenie _.reduce wyjaśnienie?
- 20. Wyjaśnienie java.sql.SQLException: Już zamknięte
- 21. Proste wyjaśnienie losowego lasu
- 22. Wyjaśnienie błędów TypeScript Linter
- 23. snprintf i sprintf wyjaśnienie
- 24. Wyjaśnienie odniesień w C++
- 25. Wyjaśnienie int? vs int
- 26. Algorytm Chaitin-Briggs wyjaśnienie
- 27. SPOJ: wyjaśnienie rozwiązania M3TILE
- 28. Groovy Zamknięcie wyjaśnienie
- 29. Wyjaśnienie i wykorzystanie jsonp
- 30. Model procesu minFreeThreads wyjaśnienie
"Innymi słowy, jest to delegat, który reprezentuje funkcję pobierającą argument int i zwracającą ciąg znaków". Aby uniknąć nieporozumień u innych osób, wyjaśnię, że mówisz tutaj o Func, a nie o Func . Jest oczywiste, jeśli rozumiesz typy ogólne i delegatów, ale dla tych, którzy nie są Func , którzy mogą delegować do funkcji, która pobiera argument int i zwraca ciąg znaków. –
Wyjaśnimy, kiedy wrócę na komputer później. –
Downvoters: podaj powody ... –