C# "error CS1002: ; expected" hatası, derleyicinin bir ifadenin ya da bildirimin sonunda noktalı virgül aradığını ama bulamadığını söyler. CS1002, derleyicinin noktalı virgül beklediğini bildirir; ancak önceki satırdaki sözdizimi de kontrol edilmelidir. Hata çoğunlukla ifade sonundaki eksik noktalı virgülden gelir. Ama bir önceki satırdaki kapanmamış parantez, tırnak ya da süslü parantez sorunu da aynı mesajı üretebilir.
CS1002 ne söylüyor ve önce hangi satıra bakmalısın?
Mesaj düz bir cümledir: derleyici bir ifadeyi okurken noktalı virgül bekledi, onun yerine başka bir sözcük gördü. Hata penceresinde ya da terminalde satır genel olarak şu biçimdedir:
Program.cs(satır,sütun): error CS1002: ; expected
Soldan sağa dosya adını, hatanın bildirildiği konumu, hata kodunu ve mesajı görürsün. Burada önemli olan şey, konumun derleyicinin takıldığı yeri göstermesidir. Takıldığı yer ile hatanın asıl sebebi çoğu zaman aynı satır olur, ama bazen bir önceki satırdır.
Küçük bir örnek:
int sayi = 5
Console.WriteLine(sayi);
Derleyici ilk satırda 5 değerini okuyup ifadenin bittiğini düşünür ve noktalı virgül arar. Bunun yerine bir sonraki satırdaki Console sözcüğüyle karşılaşır, çünkü ifade henüz kapanmamıştır. Bu yüzden hata, eksik olan satırın sonunda ya da hemen ardındaki satırda bildirilebilir. Düzeltilmiş hâli:
int sayi = 5;
Console.WriteLine(sayi);
Beklenen çıktı 5 olur. Pratik kural: hata işaretli satıra bak, orada bir şey bulamazsan hemen bir üst satıra çık.
Noktalı virgül nerede gerekir, nerede gerekmez?

Her yapı için sorulacak soru şudur: bu bir deyim mi, yoksa blok mu? Deyim bir iş yapar ve noktalı virgülle biter. Blok ise süslü parantezlerle kapanan bir çerçevedir.
Noktalı virgül isteyenler:
- Değişken tanımlama ve atama:
int x = 3; - Metot çağrısı:
Console.WriteLine(x); return,breakvecontinuedeyimleri
Noktalı virgül istemeyenler:
- Blok sonundaki
} if,while,forveforeachbaşlıkları, yani gövdeden önceki kısım- Sınıf ve metot bildirimlerinin başlığı ile gövdesi
İki yapı bu kuralı bozmuş gibi görünür. do-while döngüsünde while (...) kısmından sonra noktalı virgül gerekir, çünkü döngü bu koşul ifadesiyle biter. for başlığında ise üç bölümü ayıran tam iki noktalı virgül bulunur. Biri eksik ya da fazlaysa derleyici hata verir.
for (int i = 1; i <= 3; i++)
{
Console.WriteLine("for turu: " + i);
}
int sayac = 0;
do
{
sayac++;
Console.WriteLine("do-while sayac: " + sayac);
} while (sayac < 2);
Konsol uygulamasında çalıştırdığında şu çıktıyı alırsın:
for turu: 1
for turu: 2
for turu: 3
do-while sayac: 1
do-while sayac: 2
Örnekte for başlığının sonunda ve do bloğunun kapanış parantezinde noktalı virgül yoktur; yalnızca while (sayac < 2) sonrasında vardır. Bu yapıları ezberlemek yerine her satırda "bu bir deyim mi, blok mu?" diye sormak daha kalıcı bir alışkanlık kazandırır. Temel sözdizimi seviyeni ölçmek istersen C# bilgi testi yalnızca seviye ölçümü yapan ücretsiz bir araçtır.
Hata işaretli satırda değil de öncesindeyse ne yapmalısın?
Derleyici noktalı virgülün gelmesi gereken yeri işaretler. Sorunun başladığı yer ise çoğu zaman bir önceki satırdır. İfade bitmemiş, tırnak açık ya da blok yarım kalmış olabilir. Derleyici bunu ancak sonraki satıra geçince fark eder ve hatayı orada bildirir. Bu yüzden işaretli satırdan bir önceki satıra bak.
Üç tipik örnek
1. Kapanmamış parantez:
Console.WriteLine("Merhaba"
int sayi = 5;
İlk satırda ) eksik. Derleyici ifadenin bittiğini sanıp sonraki satıra geçer ve orada sorun bildirir. Düzeltme ilk satırdadır: Console.WriteLine("Merhaba");
2. Kapanmamış string tırnağı:
string ad = "Ayşe;
Console.WriteLine(ad);
Kapanış tırnağı olmadığı için ; da string'in içinde kalır ve deyim bitmemiş görünür. Düzeltme: string ad = "Ayşe";
3. Eksik ya da fazla süslü parantez:
static void Main()
{
int x = 5;
if (x > 3)
{
Console.WriteLine("büyük");
}}
Console.WriteLine("bitti");
}
Fazladan } metodu erken kapatır. Sonraki satırlar metodun dışında kalır ve derleyici farklı hata mesajları üretebilir, bunların arasında CS1002 de olabilir. Düzeltme için if bloğunun kapanışına bak, fazla süslü parantezi sil.
Şüpheli satır mantığı
| Örnek | Şüpheli satır | Derleyicinin takıldığı yer |
|---|---|---|
| Parantez | Açık kalan çağrının satırı | Bir sonraki satırın başı |
| Tırnak | Kapanmayan string'in satırı | Satırın sonu ya da sonraki satır |
| Süslü parantez | Blok kapanışının satırı | Bloktan sonraki ilk deyim |
Üçünde de ortak nokta şudur: derleyici, kodun yanlış olduğunu yanlışın bittiği yerde değil, artık devam edemediği yerde söyler. Dosya adı, satır bilgisi, hata kodu ve mesajdan oluşan çıktıdaki satır bilgisini başlangıç noktası say, kesin adres sayma.
Satır satır teşhis sırası ve düzeltme kontrol listesi

Hata listesi kalabalık göründüğünde şu sırayı izle:
- Hata listesinde en üstteki, yani ilk hatayı bul.
- İşaretli satırı baştan sona oku.
- Bir önceki satıra bak, ifade orada bitmiş mi?
- Parantez, tırnak ve süslü parantez dengesini kontrol et: açılan her işaretin bir kapanışı olmalı.
- Yalnızca bulduğun sorunu düzelt.
- Projeyi yeniden derle ve listeyi tekrar oku.
Zincirleme hatalar
Tek bir eksik noktalı virgül ya da parantez, derleyicinin sonraki satırları yanlış yorumlamasına yol açabilir. Listede onlarca hata görürsen çoğu aynı kaynaktan gelmiş olabilir. Bu yüzden her zaman ilk hatadan başla ve her düzeltmeden sonra yeniden derle. Düzeltme sonrası listenin kısalması, doğru yerde olduğunun iyi bir işaretidir.
Kısa kontrol listesi
- Her deyimin sonunda
;var mı? forbaşlığında iki noktalı virgül doğru yerde mi?do { ... } while (koşul);satırı noktalı virgülle bitiyor mu?- String'lerin açılış ve kapanış tırnakları eşleşiyor mu?
- Parantezler ve süslü parantezler dengeli mi?
- Bir
if,forya dawhilesatırının sonunda gereksiz;kalmış mı?
Fazladan noktalı virgül: derlenir ama mantığı bozar
Eksik noktalı virgül derleyiciyi durdurur ve seni hataya yönlendirir. Fazla noktalı virgül ise çoğu zaman sessiz kalır. if satırının sonuna konan ; boş bir deyim oluşturur. Derleyici koşulun gövdesinin bu boş deyim olduğunu varsayar, alttaki satır da koşuldan bağımsız çalışan sıradan bir komut olur.
int sayi = 5;
if (sayi > 10);
Console.WriteLine("Sayı 10'dan büyük.");
Beklenen çıktı:
Sayı 10'dan büyük.
sayi değeri 5 olduğu hâlde mesaj ekrana yazılır. Çünkü if yalnızca kendi satırındaki boş deyimi kontrol eder, Console.WriteLine ise koşulun dışında kalır. Girinti bu kodun if'e bağlıymış gibi görünmesine yol açar, ama derleyici girintiye bakmaz.
Doğru yazım şöyledir:
int sayi = 5;
if (sayi > 10)
{
Console.WriteLine("Sayı 10'dan büyük.");
}
Bu sürümde koşul sağlanmadığı için ekrana hiçbir şey yazılmaz.
Derleyici bu tür durumlarda olası bir yanlış boş deyim için uyarı üretebilir. Uyarı hata gibi derlemeyi durdurmadığından gözden kaçması kolaydır. Uyarı listesini hata listesiyle birlikte okumak bu yüzden işe yarar. Aynı tuzak while ve for satırlarının sonunda da karşına çıkabilir. Tek komutluk gövdelerde bile süslü parantez kullanmak, satırın sonundaki yanlış ; işaretini daha görünür kılar.
| Durum | Sonuç | Fark edilme biçimi |
|---|---|---|
Eksik ; | Derleme hatası (CS1002) | Program çalışmadan önce görünür |
Fazla ; (if sonunda) | Derlenir, mantık bozulur | Çıktıyı beklenenle karşılaştırınca anlaşılır |
Sözdizimi hatalarını azaltan çalışma alışkanlıkları
Küçük parçalar hâlinde yazıp sık derlemek, CS1002 gibi hataları tek satıra indirir. Yirmi satırı bir seferde yazıp derlersen mesaj bu yirmi satırın herhangi birini işaret edebilir. Üç beş satırda bir derlediğinde ise şüpheli alan çok daha dar olur.
- Kırmızı dalgalı çizgileri oku: Düzenleyicinin altını çizdiği yerin üzerine geldiğinde çıkan açıklama, derleyici mesajının erken bir halidir. Program çalıştırılmadan düzeltme fırsatı verir.
- Girintiyi düzenli tut: Düzenleyicinin otomatik biçimlendirme özelliğini kullan. Girinti beklediğinden farklı görünüyorsa, bir süslü parantez ya da noktalı virgül yerinde değildir.
- Açtığın şeyi hemen kapat: Parantez, tırnak ve süslü parantezi açar açmaz karşılığını yaz, sonra içini doldur. Önceki satırdaki eksik bir kapanış, hatanın sonraki satırda görünmesinin yaygın sebebidir.
- Tek komutluk gövdede bile süslü parantez kullan: Önceki bölümdeki gibi sessiz mantık hatalarını görünür hâle getirir.
Sözdizimi hatalarını ayıklamak dil kurallarına aşinalıkla ilgilidir. Mantık kurma becerin ise ayrı bir konudur. İkisini ayrı ölçmek istersen ücretsiz bilgi testleri merkezindeki dilden bağımsız algoritmik düşünme testine ve diğer seviye testlerine bakabilirsin. Bu testler yalnızca mevcut seviyeni görmene yardım eder.
CS1002 ilk bakışta can sıkıcı görünse de çoğu zaman tek bir karakterle çözülür. Mesajı okuyup işaretli satırın biraz öncesine bakmak çoğu durumda yeterli olur.