Чести грешки
Срещнал си грешка? Намери я тук (или през търсенето — Ctrl K) и виж какво означава, защо се случва и как се оправя. Съобщението за грешка не е наказание — то е упътване.
Компилационни грешки
Кодът отказва да се компилира — Visual Studio ги подчертава в червено още докато пишете.
CS1002 Липсваща точка и запетая
; expected
Защо се случва: Команда не завършва с ;. Компилаторът често посочва следващия ред, не виновния — гледайте и реда над посочения.
Как се оправя: Добавете ; в края на командата. Помнете: след if (...), for (...) и дефиниция на метод НЕ се пише ;.
CS0103 Непознато име
The name 'myVariable' does not exist in the current context
Защо се случва: Използвате име, което не съществува: правописна грешка, разлика в главни/малки букви (myVariable ≠ MyVariable), или променливата е декларирана в друг блок (вътре в if/цикъл) и тук не се вижда.
Как се оправя: Проверете изписването буква по буква. Ако променливата трябва да се ползва и след блока — декларирайте я преди него.
CS0029 Несъвместими типове
Cannot implicitly convert type 'string' to 'int'
Защо се случва: Опит да се присвои стойност от един тип на променлива от друг — най-често резултатът от Console.ReadLine() (винаги string) директно в число.
Как се оправя: Преобразувайте изрично: int n = int.Parse(Console.ReadLine()); или ползвайте int.TryParse. Обратно (число → текст): n.ToString().
CS0161 Не всички пътища връщат стойност
not all code paths return a value
Защо се случва: Метод с връщан тип (напр. int) има път на изпълнение, който не стига до return — типично: return само вътре в if, без else.
Как се оправя: Гарантирайте return по всеки път: добавете return след if-а или в else. Компилаторът трябва да е сигурен, че методът винаги връща нещо.
CS1513 Липсваща затваряща скоба
} expected
Защо се случва: Незатворена къдрава скоба — някой блок (if, цикъл, метод, клас) е отворен с {, но не е затворен. Грешката често сочи края на файла.
Как се оправя: Подравнете кода (във Visual Studio: Ctrl+K, Ctrl+D) — разместеното подравняване издава мястото. Пишете { и } едновременно и после пълнете блока.
Грешки по време на изпълнение (изключения)
Програмата се компилира, но "гърми" при изпълнение. Как се обработват — вижте модула за изключения.
FormatException Невалиден формат при парсване
Input string was not in a correct format.
Защо се случва: int.Parse / double.Parse получава текст, който не е число: букви, празен низ (само Enter), или дробно число с грешен десетичен знак.
Как се оправя: Използвайте int.TryParse(input, out int n) — връща false вместо да гърми, и питайте отново. Алтернатива: try-catch около парсването.
NullReferenceException Обектът е null
Object reference not set to an instance of an object.
Защо се случва: Извикване на метод/свойство върху променлива, която е null — обектът никога не е създаден с new, или метод е върнал null (напр. FirstOrDefault без съвпадение).
Как се оправя: Проверете с if (obj != null) преди употреба. Намерете КЪДЕ е трябвало обектът да се създаде — обикновено липсва new или резултат не е проверен.
IndexOutOfRangeException Индекс извън масива
Index was outside the bounds of the array.
Защо се случва: Достъп до елемент на невалиден индекс. Класиката: arr[arr.Length] — последният валиден индекс е Length - 1, защото броенето тръгва от 0. Чест виновник е и i <= arr.Length в цикъл.
Как се оправя: Циклите винаги с i < arr.Length (не <=). Преди ръчен достъп: if (i >= 0 && i < arr.Length).
DivideByZeroException Делене на нула
Attempted to divide by zero.
Защо се случва: Целочислено делене (int / int) с делител 0 — често когато делителят идва от потребителя или от пресмятане. (Любопитно: при double няма грешка — резултатът е Infinity!)
Как се оправя: Проверете делителя преди операцията: if (b == 0) { Console.WriteLine("Не може да се дели на нула!"); }.
KeyNotFoundException Липсващ ключ в речник
The given key was not present in the dictionary.
Защо се случва: Четене от Dictionary по ключ, който не съществува: prices["липсващ"].
Как се оправя: Преди четене: if (dict.ContainsKey(key)), или още по-добре — dict.TryGetValue(key, out var value). Записването по нов ключ е винаги безопасно.
FileNotFoundException Файлът не е намерен
Could not find file 'C:\...\data.txt'.
Защо се случва: Четене на файл, който не съществува на посочения път. При относителен път ("data.txt") програмата търси в папката, от която се изпълнява (bin/Debug) — не в папката на проекта!
Как се оправя: Проверявайте с File.Exists(path) преди четене. Погледнете в съобщението КЪДЕ точно е търсен файлът — пътят в грешката казва всичко.
InvalidOperationException Промяна на колекция по време на foreach
Collection was modified; enumeration operation may not execute.
Защо се случва: Добавяне или премахване на елементи от списък, докато той се обхожда с foreach — колекцията не може да се променя по време на обхождането.
Как се оправя: Обхождайте копие: foreach (var x in list.ToList()), съберете промените в отделен списък и ги приложете след цикъла, или ползвайте for цикъл отзад напред.
Как се чете съобщение за грешка
- Типът (напр.
FormatException) казва какво се е объркало. - Съобщението уточнява детайла (кой файл, кой ключ, какъв формат).
- Редът (line 14) или stack trace-ът казва къде — започнете оттам.
- Ако не помогне — потърсете типа на грешката тук в наръчника или в търсачка.