Библиотека задач по C# | тесты, код, задания
4.88K subscribers
485 photos
5 videos
692 links
Задачи и тесты по C# для тренировки и обучения.

Учиться у нас: https://clc.to/3e1SCw

По рекламе: @tproger_sales_bot

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
👅 Самое сложное — выбрать не курс, а направление

Сегодня хочется разобраться в AI-агентах. Через пару недель появляется задача, где нужны алгоритмы. Потом понимаешь, что неплохо бы освежить Python или математику для Data Science.

🔜 Именно поэтому подписка на обучение многим оказывается удобнее отдельных курсов. Можно спокойно переключаться между темами, когда меняются задачи, а не покупать новую программу каждый раз.

В подписку Proglib Academy входят все основные направления — AI, ML, Python, алгоритмы, математика для DS и другие курсы, а ещё закрытый видеохаб с вебинарами практиков.


Начать можно с пробного месяца. Если решите остаться, его стоимость зачтётся при оформлении подписки 😎

🔗 Узнать подробнее

🏃‍♀️ Proglib Academy
Please open Telegram to view this post
VIEW IN TELEGRAM
Какое ключевое слово C# используется для изменения данных и поведения базового класса путем замены члена базового класса новым производным членом?

👾 — overrides
👍 — protected
🥰 — base
⚡️ — new

🐸Библиотека задач по C#
Please open Telegram to view this post
VIEW IN TELEGRAM
👾33🥱2❤1
😭 Как не потратить недельный лимит AI-кодинга за три дня?

Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.

🔘 Поговорим о том:

— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.

✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.

⬇️ 17 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок

💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.

🔗 Зарегистрироваться на вебинар⁠
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выводит Console.WriteLine("Hello".ToUpper());?

👾
— HELLO
👍 — hello
🥰 — Error
⚡️ — Ничего из вышеперечисленного

Библиотека задач по C#
👾66😁5
Forwarded from Библиотека программиста
👀 Как вы смотрите видео?

Разбираете урок, слушаете интервью фоном или начинаете на телефоне, а продолжаете на большом экране?

Хотим узнать, что делает просмотр удобным для вас. Вспомните последнее видео — ролик, урок, фильм или серию сериала — и расскажите о своём опыте. Если детали не запомнились, можно так и ответить.

🕰️ Опрос займёт около 3 минут.

В результатах сможете сравнить свои привычки с ответами других участников. А разработчики и инженеры видеоплатформы расскажут, что происходит по ту сторону экрана, пока вы смотрите видео.

🔗 Поделиться опытом

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
Record class скопировали через with. Вложенный список тоже скопировался?

У объекта есть свойство Tags — изменяемый список строк. Используется стандартный copy constructor. В нём один элемент. Создали copy выражением original with { } и добавили второй элемент в copy.Tags.

Сколько элементов теперь в original.Tags?

👾 — Два, оба объекта ссылаются на один список
👍 — Один, with копирует весь граф объектов
🥰 — Ноль, исходный список очищается
⚡️ — Ошибка компиляции, record запрещает изменяемые свойства

Библиотека задач по C#
👾16
checked вокруг вызова защитит умножение внутри другого метода?

Метод Multiply принимает два int и возвращает их произведение в unchecked-контексте. Выполняется выражение checked(Multiply(int.MaxValue, 2)). Пользовательских операторов нет.

Что получится?

👾 — -2
👍 — OverflowException
🥰 — 4294967294
⚡️ — Ошибка компиляции

Библиотека задач по C#
👍2⚡1👾1
Что попадёт в результат LINQ после изменения списка?

Что выведет код? Нужные using подключены.

var numbers = new List<int> { 1, 2, 3 };
var selected = numbers.Where(n => n > 1);
numbers.Add(4);

Console.WriteLine(string.Join(", ", selected));


👾 — 2, 3 — запрос запомнил исходный список
👍 — 2, 3, 4 — список читается при переборе
🥰 — 4 — запрос видит только новые элементы
⚡️ — InvalidOperationException

Ответ: 👍 — 2, 3, 4 — список читается при переборе.

Where выполняет отбор при переборе. Добавление произошло до начала перебора в string.Join, поэтому в результат попадёт и 4.

Правило в документации C#

Библиотека задач по C#
👍9👾2
😎 Выбираешь один курс, второй получаешь бесплатно. Баг? Нет, акция!

До 31 октября в Proglib Academy можно выбрать два курса и заплатить только за один.

Например, можно совместить:

💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью.

💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.


Вместе курсы стоят 108 000 ₽, но по акции оба обойдутся в 59 000 ₽. Экономия — 49 000 ₽ 🔥

Интересуют Python и ИИ или алгоритмы и архитектура? Можно выбрать любые два курса из каталога.

Акция действует до 31 октября включительно ⏳

⏬ Собрать свой учебный билд
Please open Telegram to view this post
VIEW IN TELEGRAM
Какие числа напечатают действия, созданные в цикле for?

Что выведет код? Нужные using подключены.

var actions = new List<Action>();

for (int i = 0; i < 3; i++)
{
actions.Add(() => Console.Write(i));
}

foreach (var action in actions)
action();


👾 — 012
👍 — Ошибка компиляции
🥰 — 123
⚡️ — 333

Ответ: ⚡️ — 333.

Все три лямбды захватывают одну переменную i из for. Действия выполняются после завершения цикла, когда i равна 3. Это отличается от захвата переменной foreach в современных версиях C#.

Правило в документации C#

Библиотека задач по C#
⚡1
Изменит ли finally значение, уже выбранное для return?

Что выведет код? Нужные using подключены.

class Program
{
static int GetValue()
{
int value = 1;
try { return value; }
finally { value = 2; }
}

static void Main()
{
Console.WriteLine(GetValue());
}
}


👾 — 1
👍 — 2
🥰 — Ничего: finally отменит return
⚡️ — Ошибка компиляции

Ответ: 👾 — 1.

Выражение return value вычисляется до выполнения finally: результатом становится число 1. Затем finally меняет локальную переменную, но уже выбранное возвращаемое значение от этого не меняется.

Правило в документации C#

Библиотека задач по C#
👾5❤3
Изменится ли структура после вызова метода через интерфейс?

Что выведет код? Нужные using подключены.

interface ICounter { void Increment(); }

struct Counter : ICounter
{
public int Value;
public void Increment() { Value++; }
}

class Program
{
static void Main()
{
Counter original = new Counter();
ICounter boxed = original;
boxed.Increment();

Console.WriteLine(original.Value);
Console.WriteLine(((Counter)boxed).Value);
}
}


👾 — 1 и 1
👍 — 0 и 0
🥰 — 0 и 1
⚡️ — Ошибка компиляции

Ответ: 🥰 — 0 и 1.

При преобразовании Counter к ICounter происходит упаковка: в объект помещается копия структуры. Increment изменяет эту упакованную копию. Исходная структура сохраняет Value = 0, а при распаковке boxed получаем Value = 1.

Правило в документации C#

Библиотека задач по C#
🥰2
📌 Один курс — хорошее вложение в себя. Два по той же цене — ещё лучше.

В Proglib Academy действует акция: покупаешь один курс, а второй получаешь в подарок.

Например, можно совместить два направления по работе с ИИ:

💥 ИИ для разработчиков — применение нейросетей в повседневной разработке: работа с кодом, тестирование и ревью.

💥 Разработка ИИ-агентов — архитектура агентов и создание собственных AI-решений.


📍 Разница в цене — почти 50 тысяч рублей. Можно освоить больше, не выходя за рамки запланированного бюджета.

А если тебе интереснее Python, алгоритмы, backend или DevOps — выбирай другую пару курсов из каталога.

Акция действует до 31 октября включительно ⏳

⏮️ Пора прокачать свой стек
Please open Telegram to view this post
VIEW IN TELEGRAM
Можно ли записать число в массив строк через переменную object[]?

Что произойдёт при выполнении кода? Нужные using подключены.

object[] values = new string[1];
values[0] = 42;

Console.WriteLine("OK");


👾 — OK — число сохранится как object
👍 — ArrayTypeMismatchException
🥰 — Ошибка компиляции
⚡️ — OK — число превратится в строку

Ответ: 👍 — ArrayTypeMismatchException.

string[] можно присвоить переменной object[] благодаря ковариантности массивов. Но сам массив остаётся массивом строк. Запись int проходит компиляцию, а во время выполнения проверка типа вызывает ArrayTypeMismatchException.

Правило в документации C#

Библиотека задач по C#
👍1
Какую перегрузку выберут для строки в переменной object?

Что выведет код? Нужные using подключены.

class Program
{
static void Show(object value)
{
Console.Write("object");
}

static void Show(string value)
{
Console.Write("string");
}

static void Main()
{
object value = "hello";
Show(value);
Show((string)value);
}
}


👾 — stringstring
👍 — objectobject
🥰 — Ошибка компиляции
⚡️ — objectstring

Ответ: ⚡️ — objectstring.

В первом вызове тип аргумента при компиляции — object, поэтому выбирается Show(object). После явного приведения аргумент имеет тип string и выбирается Show(string). Здесь нет dynamic, и фактическое содержимое переменной не переключает перегрузку.

Правило в документации C#

Библиотека задач по C#
⚡1
Что получится, если соединить null и bool?

C# 12. Что выведет код?

using System;

bool? value = null;

Console.WriteLine($"{value & false} {value | true}");


👾 — False True
👍 — null null
🥰 — False False
⚡️ — Ошибка компиляции

Ответ: 👾 — False True.

Для bool? работают три значения: true, false и null. У выражения value & false результат всегда false. У value | true — всегда true. Неизвестное значение второго операнда этому не мешает.

Документация: логические операторы для bool?

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👾1
Что выполнится раньше: фильтр catch или finally?

C# 12. Что выведет код?

using System;

try
{
try { throw new Exception(); }
finally { Console.Write("F"); }
}
catch (Exception) when (Check())
{
Console.Write("C");
}

static bool Check()
{
Console.Write("Q");
return true;
}


👾 — FQC
👍 — QFC
🥰 — QCF
⚡️ — FCQ

Ответ: 👍 — QFC.

Сначала среда ищет подходящий обработчик и проверяет фильтр — печатается Q. Затем выполняет finally при выходе из вложенного блока — F. После этого управление попадает в catch — C.

Документация: фильтры исключений

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰1👾1
Равны ли кортежи с разными именами полей?

C# 12. Что выведет код?

using System;

var first = (X: 1, Y: 2);
var second = (A: 1, B: 2);

Console.WriteLine(first == second);


👾 — Ошибка компиляции
👍 — False
🥰 — True
⚡️ — Исключение при сравнении

Ответ: 🥰 — True.

Оператор == сравнивает соответствующие элементы кортежей. Имена полей в сравнении не участвуют: здесь сравниваются 1 с 1 и 2 с 2.

Документация: равенство кортежей

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰2
Что попадёт в params, если передать null?

C# 12, проверка nullable отключена. Что выведет код?

using System;

Show(null);
Show((object)null);

static void Show(params object[] items)
{
Console.Write(
items is null ? "null " : items.Length + " "
);
}


👾 — 1 1
👍 — 0 1
🥰 — null null
⚡️ — null 1

Ответ: ⚡️ — null 1.

В первом вызове null передаётся как сам массив. Во втором приведение к object заставляет передать один элемент: компилятор создаёт массив длины 1, который содержит null.

Документация: параметры params

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡4
В каком порядке выполнится код с await?

C# 12. Что выведет код?

using System;
using System.Threading.Tasks;

var gate = new TaskCompletionSource<bool>();

async Task Work()
{
Console.Write("A");
await gate.Task;
Console.Write("C");
}

var task = Work();
Console.Write("B");
gate.SetResult(true);
await task;


👾 — ABC
👍 — BAC
🥰 — ACB
⚡️ — Порядок каждый раз разный

Ответ: 👾 — ABC.

Вызов Work() сразу печатает A. На незавершённой задаче выполнение метода приостанавливается, и вызывающий код печатает B. Только после SetResult метод может продолжить работу и вывести C.

Документация: выполнение асинхронного метода

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
Получит ли класс готовый метод из интерфейса?

C# 12. Скомпилируется ли программа?

using System;

var item = new Item();
item.Show();

interface IShow
{
void Show() => Console.Write("I");
}

class Item : IShow { }


👾 — Да, выведет I
👍 — Нет, у Item нет доступного метода Show
🥰 — Да, но ничего не выведет
⚡️ — Да, но при вызове будет исключение

Ответ: 👍 — Нет, у Item нет доступного метода Show.

Реализация метода в интерфейсе не добавляет этот метод в класс. Вызвать её можно через переменную интерфейсного типа: IShow item = new Item(); item.Show();. Такой код выведет I.

Документация: реализация методов в интерфейсах

➡️ Навигация: База знаний • Задачи • Собеседования • Вакансии

🐸 Библиотека программиста
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1👾1