Junior — Middle
Czy możesz wyjaśnić koncepcję opóźnionej inicjalizacji wyników w LINQ i jak ona działa?
sobes.tech AI
Odpowiedź od AI
W LINQ (Language Integrated Query) w C# używa się koncepcji opóźnionej (leniwej) inicjalizacji lub opóźnionego wykonania zapytań. Oznacza to, że samo zapytanie do kolekcji nie jest wykonywane w momencie jego deklaracji, lecz dopiero wtedy, gdy odwołujemy się do wyniku, na przykład podczas iteracji w pętli lub wywołania metod, które wymagają materializacji (np. ToList(), ToArray()).
Opóźnione wykonanie pozwala:
- Optymalizować wydajność, ponieważ zapytania nie są wykonywane bez potrzeby.
- Tworzyć złożone łańcuchy zapytań, które będą wykonywane jednym przejściem.
Przykład:
var numbers = new List<int> {1, 2, 3, 4, 5};
var query = numbers.Where(n => n > 3); // Zapytanie zadeklarowane, ale nie wykonane
foreach(var num in query) // Tu następuje wykonanie zapytania
{
Console.WriteLine(num); // Wypisze 4 i 5
}
Jeśli zmienimy kolekcję numbers po zadeklarowaniu zapytania, ale przed jego wykonaniem, wynik się zmieni, ponieważ zapytanie jest wykonywane dokładnie w momencie iteracji.