編譯錯誤 · error CS1519

類、結構或介面成員宣告中的無效標記"X"

類體裡編譯器只接受宣告——欄位、方法、屬性、建構子。它找到了別的東西,所以不知道你在宣告什麼成員。

親眼看它發生

class Counter
{
    5   // 一個值不是成員宣告
}

成因一:語句直接寫在類體裡

這是新手最常踩的——可執行程式碼必須待在方法內:

class Bad
{
    int x = 0;
    x = 5;              // ✗ CS1519 —— 語句得放進方法裡
}
class Good
{
    int x = 0;

    public void SetToFive()
    {
        x = 5;          // ✓ 語句活在方法裡
    }

    public int Read() { return x; }
}

var g = new Good();
g.SetToFive();
Console.WriteLine(g.Read());

成因二:欄位沒有型別

class Config
{
    maxRetries = 3;    // 缺型別——編譯器把 maxRetries 當成了成員名
}
class Config
{
    public int maxRetries = 3;   // 型別 + 名字 + 初始化
}

Console.WriteLine(new Config().maxRetries);

成因三:方法被寫到了類外面

如果類的右花括號提前閉合了,方法就落到了檔案級作用域。現代 C# 允許頂層方法,所以這個錯有點隱蔽——但方法一旦引用類裡的欄位就會失敗:

class Counter
{
    private int count = 0;
}   // ← 類在這裡就閉合了

public void Increment()      // 現在跑到類外面了
{
    count++;                  // count 已經不在作用域裡
}

成因四:多餘的字元

一個孤立的逗號、位置不對的分號、或者複製貼上帶來的 # 都能觸發同一句報錯。讀編譯器點名的那個 token——它精確告訴你它噎在哪個字元上。

常見問答

CS1519 是什麼意思?

在應該出現成員宣告的位置出現了無效標記。把語句移進方法,給每個欄位補型別。

為什麼不能在類裡直接跑程式碼?

類體只接受宣告。可執行語句屬於方法或建構子。

排查清單