Kompilatorfel CS1654
Det går inte att ändra medlemmar i variabeln eftersom det är en skrivskyddad variabeltyp
Det här felet uppstår när du försöker ändra medlemmar i en variabel som är skrivskyddad eftersom den är i en speciell konstruktion.
Ett vanligt område som detta inträffar är inom foreach-loopar . Det är ett kompileringsfel att ändra värdet för samlingselementen. Därför kan du inte göra några ändringar av element som är värdetyper, inklusive structs. I en samling vars element är referenstyper kan du ändra tillgängliga medlemmar i varje element, men alla försök att lägga till eller ta bort eller ersätta fullständiga element genererar kompilatorfel CS1656.
I följande exempel genereras felet CS1654 eftersom Book
är en struct
. Åtgärda felet genom struct
att ändra till en klass.
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
}
}
}
}
Feedback om .NET
.NET är ett öppen källkod projekt. Välj en länk för att ge feedback: