C# C#  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Сложный  · 

Лямбды и деревья выражений

Сравнивает обычные лямбды и деревья выражений: захват переменных, замыкания, компиляцию, разбор и перевод провайдером. В заданиях нужно увидеть, где работает делегат, где описывается структура запроса и почему механическое объединение выражений ломает параметры.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 25
Какое число вернёт лямбда transform для аргумента 3?
C#
Func<int, int> transform = x => x * 2 + 2;
Console.WriteLine(transform(3));
Вопрос 2 из 25
Чем static-лямбда отличается здесь?
C#
var offset = 10;
Func<int, int> f = static x => x + 1;
// static x => x + offset  // не компилируется
Вопрос 3 из 25
Когда нужны фигурные скобки и явный return?
Вопрос 4 из 25
Почему вызов M(x => x > 0) может быть неоднозначным?
C#
void M(Func<int, bool> p) { }
void M(Expression<Func<int, bool>> p) { }
// M(x => x > 0); // неоднозначно
Вопрос 5 из 25
Какой тип имеет async-лямбда в этом присваивании?
C#
Func<Task<int>> load = async () =>
{
    await Task.Delay(1);
    return 42;
};
Вопрос 6 из 25
Какое значение прочитает замыкание после изменения захваченной переменной x?
C#
var x = 1;
Func<int> get = () => x;
x = 3;
Console.WriteLine(get());
Вопрос 7 из 25
Что напечатают три делегата?
C#
var actions = new List<Action>();
for (var i = 0; i < 3; i++)
    actions.Add(() => Console.Write($"{i} "));
foreach (var a in actions) a();
Вопрос 8 из 25
Как получить 0 1 2 в предыдущем примере?
C#
for (var i = 0; i < 3; i++)
{
    var copy = i;
    actions.Add(() => Console.Write($"{copy} "));
}
Вопрос 9 из 25
Почему захват большого объекта долгоживущим делегатом важен для памяти?
Вопрос 10 из 25
Когда static-лямбда особенно полезна?
C#
items.Sort(static (a, b) => a.Id.CompareTo(b.Id));
Вопрос 11 из 25
Что хранится в Expression<Func<int,bool>>?
Вопрос 12 из 25
Что вернёт compiled(5)?
C#
Expression<Func<int, bool>> expr = x => x > 3;
var compiled = expr.Compile();
Console.WriteLine(compiled(5));
Вопрос 13 из 25
Почему statement-bodied lambda обычно нельзя преобразовать в expression tree?
C#
// Expression<Func<int,int>> e = x =>
// {
//     var y = x + 1;
//     return y * 2;
// };
Вопрос 14 из 25
Как определить, что тело выражения — вызов метода StartsWith?
Вопрос 15 из 25
Что обычно представляет захваченная переменная в дереве?
C#
var min = 10;
Expression<Func<Product, bool>> e = p => p.Price >= min;
min = 20;
Вопрос 16 из 25
Что следует передать IQueryable<Product>.Where, чтобы условие мог перевести SQL-провайдер?
Вопрос 17 из 25
Какой риск в вызове AsEnumerable() до Where?
C#
var result = db.Products
    .AsEnumerable()
    .Where(p => ExpensiveLocalCheck(p));
Вопрос 18 из 25
Почему простое Expression.AndAlso(a.Body, b.Body) может сломаться?
Вопрос 19 из 25
Как безопаснее строить сортировку по выбранному пользователем полю?
C#
var selectors = new Dictionary<string, Expression<Func<Product, object>>>
{
    ["name"] = p => p.Name,
    ["price"] = p => p.Price
};
Вопрос 20 из 25
Что даёт объект Specification с Expression<Func<T,bool>>?
Вопрос 21 из 25
Как проверить чистый Expression<Func<Order,bool>> без базы?
C#
var predicate = ActiveWithDebt.Compile();
Assert.True(predicate(new Order { Active = true, Debt = 1 }));
Assert.False(predicate(new Order { Active = true, Debt = 0 }));
Вопрос 22 из 25
Почему Compile в каждой итерации горячего цикла подозрителен?
C#
foreach (var item in items)
{
    var predicate = expression.Compile();
    if (predicate(item)) count++;
}
Вопрос 23 из 25
Какой интеграционный тест нужен для динамического запроса EF Core?
Вопрос 24 из 25
Что полезно записывать при медленном динамическом запросе?
C#
using var activity = source.StartActivity("products.query");
activity?.SetTag("filter.count", filters.Count);
activity?.SetTag("sort", allowedSortKey);
var rows = await query.ToListAsync(token);
Вопрос 25 из 25
Почему полезен тест на одинаковый результат LINQ to Objects и целевого провайдера?

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу