編譯器錯誤 CS1654
無法修改 'variable' 的成員,因為它是「唯讀變數類型」
如果您嘗試修改唯讀變數 (因為它在特殊建構中) 的成員,會發生這個錯誤。
發生這種情況的其中一個常見區域是在 foreach 迴圈內。 它是編譯時期錯誤,需要修改集合項目的值。 因此,您無法修改為 實值類型的項目 (包含 結構)。 在項目為 參考類型的集合中,您可以修改每個項目的可存取成員,但任何加入、移除或取代完整項目的嘗試都會產生 Compiler Error CS1656
下列範例會產生錯誤 CS1654,因為 Book
是 struct
。 若要修正這個錯誤,請將 struct
變更為 類別。
using System.Collections.Generic;
using System.Text;
namespace CS1654
{
struct Book
{
public string Title;
public string Author;
public double Price;
public Book(string t, string a, double p)
{
Title=t;
Author=a;
Price=p;
}
}
class Program
{
List<Book> list;
static void Main(string[] args)
{
//Use a collection initializer to initialize the list
Program prog = new Program();
prog.list = new List<Book>();
prog.list.Add(new Book ("The C# Programming Language",
"Hejlsberg, Wiltamuth, Golde",
29.95));
prog.list.Add(new Book ("The C++ Programming Language",
"Stroustrup",
29.95));
prog.list.Add(new Book ("The C Programming Language",
"Kernighan, Ritchie",
29.95));
foreach(Book b in prog.list)
{
//Compile error if Book is a struct
//Make Book a class to modify its members
b.Price +=9.95; // CS1654
}
}
}
}