閱讀英文

共用方式為


編譯器錯誤 CS1654

無法修改 'variable' 的成員,因為它是「唯讀變數類型」

如果您嘗試修改唯讀變數 (因為它在特殊建構中) 的成員,會發生這個錯誤。

發生這種情況的其中一個常見區域是在 foreach 迴圈內。 它是編譯時期錯誤,需要修改集合項目的值。 因此,您無法修改為 實值類型的項目 (包含 結構)。 在項目為 參考類型的集合中,您可以修改每個項目的可存取成員,但任何加入、移除或取代完整項目的嘗試都會產生 Compiler Error CS1656

範例

下列範例會產生錯誤 CS1654,因為 Bookstruct。 若要修正這個錯誤,請將 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  
            }  
  
        }  
    }  
}