Типичные ошибки C# и как их исправить
Здесь разобраны сообщения, с которыми сталкивается почти каждый программист на C#: ошибки компиляции, NullReferenceException, выход за границы массива, проблемы с приведением типов и подключением библиотек. В каждой статье указана причина, показан код с ошибкой и рабочий вариант исправления.
Если нужной ошибки нет в списке, сравните её текст и номер, например CS0103, с заголовками статей. Для профилактики полезно прочитать и статьи про отладку: точки останова и просмотр переменных помогают находить причину быстрее, чем перебор вариантов.
Форматирование десятичных чисел с 2 знаками в C#Как вывести decimal и double с двумя знаками после запятой в C#: форматные строки F2 и N2, Math.Round, ToString и учёт культуры. Примеры кода и частые ошибки.
Аутентификация в Active Directory с помощью C#Как проверить имя пользователя и пароль через Active Directory в C#: System.DirectoryServices.AccountManagement, ValidateCredentials и обработка ошибок.
Изменение элемента формы из другой формы в C#Как изменить элемент управления одной формы из другой в Windows Forms на C#: через публичные свойства, события, делегаты и передачу ссылки на форму.
Определение вызывающего метода в C#: руководствоКак узнать, какой метод вызвал текущий, в C#: класс StackTrace, атрибут CallerMemberName и отражение. Сравнение способов по скорости и надёжности с примерами.
Unity API из другого потока и вызов в главном потокеПочему Unity API нельзя вызывать из фонового потока и как передать вызов в главный: очередь действий, SynchronizationContext и корутины. Примеры на C#.
Преобразование номера столбца Excel в буквы на C#Как преобразовать номер столбца Excel в буквенный адрес, например 27 в AA, на C#: алгоритм с делением на 26, готовая функция, обратное преобразование и примеры.
Отправка писем через Gmail в C# и .NETКак отправить письмо через Gmail из приложения на C# и .NET: настройка SmtpClient, пароль приложения, порты и SSL, вложения и разбор типичных ошибок доступа.
Журнал ошибок загрузки сборок Fusion в .NETКак включить журнал привязки сборок Fusion в .NET, найти причину ошибки FileNotFoundException при загрузке библиотеки и настроить вывод логов в папку.
Асинхронный ввод-вывод в C#: ограничение параллелизмаКак ограничить число одновременных асинхронных операций I/O в C#: SemaphoreSlim, Parallel.ForEachAsync и TPL Dataflow. Примеры кода и сравнение подходов.
Проблемы с привязкой DependencyProperty в WPFПочему не работает привязка DependencyProperty в WPF на C#: неверный DataContext, регистрация свойства и режим Binding. Способы диагностики и исправления.
Почему не нужно наследоваться от List<T> в C#Почему не стоит наследовать свой класс от List<T> в C#: проблемы инкапсуляции, гибкости, сериализации и принципа Лисков, а также лучшие альтернативы.
Почему целочисленное деление в C# не возвращает floatПочему 5 / 2 в C# даёт 2, а не 2.5: правила типов при делении, приведение к double и decimal, остаток от деления и частые ошибки в расчётах. Примеры кода.
Async и await в методе Main консольного приложенияПочему нельзя пометить Main как async в старых версиях C# и как это обойти: GetAwaiter().GetResult(), отдельный асинхронный метод и async Task Main с C# 7.1.
Расчёт точного возраста в C# с помощью DateTimeКак точно вычислить возраст по дате рождения в C#: учёт високосных лет и дня рождения в текущем году, примеры с DateTime, TimeSpan и DateOnly.
Как синхронно выполнить асинхронный Task в C#Как синхронно дождаться результата асинхронного метода Task в C#: GetAwaiter().GetResult(), Wait и Result, риски взаимоблокировок и безопасные приёмы.
Переиспользование переменной в цикле foreach в C#Можно ли объявлять переменную цикла foreach вне цикла и переиспользовать её в C#: поведение замыканий, изменения в C# 5 и влияние на производительность.
Десериализация JSON в C#: от простого к сложномуКак десериализовать JSON в объекты C#: System.Text.Json и Newtonsoft.Json, вложенные структуры, списки, настройки имён свойств и обработка ошибок парсинга.
Таймаут для асинхронных задач в C#Как задать таймаут ожидания асинхронной задачи в C#: Task.WhenAny, CancellationTokenSource, WaitAsync и обработка TimeoutException. Примеры кода.
Асинхронный Parallel.ForEach с лямбда-выражениямиКак использовать Parallel.ForEach с асинхронной лямбдой в C#: почему async void опасен, чем помогает Parallel.ForEachAsync и как ограничить число потоков.
Динамический OrderBy в LINQ для коллекций в C#Как сортировать коллекции по имени свойства во время выполнения в C#: Dynamic LINQ, деревья выражений и расширение OrderBy для IEnumerable и IQueryable.
Как встроить DLL в EXE-файл в C#Как встроить DLL в исполняемый файл на C#: ресурсы и AssemblyResolve, ILMerge, Costura.Fody и однофайловая публикация в .NET. Пошаговые примеры.
Взаимодействие форм в Windows Forms на C#Как организовать взаимодействие двух форм в Windows Forms на C#: передача данных через конструктор, свойства, события и делегаты. Примеры кода.
Явная и неявная реализация интерфейсов в C#Чем отличается явная реализация интерфейса от неявной в C#, как вызывать такие члены и когда какой вариант лучше. Примеры кода и разбор конфликтов имён.
Взаимная блокировка из-за task.Result в C#Почему вызов task.Result внутри асинхронного кода приводит к взаимной блокировке потока и как заменить его на await или другие безопасные варианты.
Все возможные комбинации элементов в C#Как сгенерировать все возможные комбинации элементов в C#: рекурсивный перебор, работа с массивами и списками, комбинации фиксированной длины с примерами.
Захват переменных в циклах и замыканиях C#Почему лямбда в цикле for или foreach в C# видит последнее значение переменной, как работает замыкание и как исправить такую ошибку без лишних усилий.
Поиск элементов управления по типу в WinFormsКак перебрать коллекцию Controls в Windows Forms, отобрать элементы нужного типа через OfType и обработать вложенные контейнеры на форме в C#.
Почему вещественные числа в C# неточныПочему 0.1 + 0.2 не равно 0.3 в C#, как устроены float и double в памяти и когда для точных расчётов нужен тип decimal вместо чисел с плавающей запятой.
Как получить DateTime из строки в C#Как превратить строку в дату и время в C#: методы DateTime.Parse, TryParse и ParseExact, форматы, культуры и безопасная обработка ошибочных значений.
Различия между String и string в C#Чем отличается String от string в C#, почему это один и тот же тип, как работают алиасы .NET и какому написанию лучше следовать в своём коде.