編譯錯誤 · error CS0131

賦值號左邊必須是變數、屬性或索引器

賦值(=)是把一個值存進某個東西。如果左邊沒有儲存空間——常量、字面量、算出來的表示式——就無處可存,編譯器直接明說。

成因一:給常量賦值

const int Max = 100;
Max = 200;         // CS0131: const 意味著永遠不能變——這就是契約

const 是編譯期的承諾:值被焊死,永久不變。如果這個值以後確實要變,那它就不是常量:

int max = 100;      // 變數……
Console.WriteLine(max);
max = 200;          // ……可以隨便重賦
Console.WriteLine(max);

真實程式碼裡的中間選項是 static readonly——啟動時賦一次,之後不可變,但不是編譯期常量。

成因二:賦給了一個表示式

int x = 5;
x + 1 = 10;        // 'x + 1' 只是算出一個值——沒有盒子能裝下 10

這幾乎總是寫反的比較或者打錯的目標。你的本意是什麼?

int x = 5;
bool isTen = (x + 1) == 10;    // 在比較?那是 '==',兩邊都可以是表示式
Console.WriteLine(isTen);
int x = 5;
x = x + 1;          // 存回變數裡:左邊是光禿禿的 x
Console.WriteLine(x);

左邊可以是什麼

左邊存進哪裡例子
變數變數本身x = 5;
屬性屬性的儲存obj.Name = "Ada";
索引器那個槽位arr[0] = 5; / dict["k"] = v;
欄位物件的欄位dog.Age = 3;

其他一切——字面量(5 = x;)、常量、方法呼叫、算術——產出的只是值,手裡沒有盒子,永遠不能站在左邊。

常見問答

C# 裡的 CS0131 是什麼意思?

等號左邊不是能存值的東西——常量、字面量或表示式。左邊只能是變數、屬性、欄位或索引器;本意是比較就用 ==。

C# 裡能賦值給 const 嗎?

永遠不能——const 是編譯期承諾,值永不改變。需要變化的值用普通變數(或啟動時賦一次的 static readonly)。

排查清單