编译器错误 CS1654
无法修改“variable”的成员,因为它是只读变量类型
当你尝试修改因在特殊构造中而只读的变量的成员时,将出现此错误。
发生这种情况的一个常见区域是在 foreach 循环内部。 它是修改集合元素的值时导致的编译时错误。 因此,你不能对 值类型(其中包括 结构)的元素做任何修改。 在其元素为 引用类型的集合中,你可以修改每个元素的成员,但尝试添加、删除或更换全部元素将生成 Compiler Error CS1656。
下面的示例生成错误 CS1654,因为 Book
是 struct
。 若要修复此错误,请将 struct
更改为 类。
C#
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
}
}
}
}