Compilerfout CS1654
Kan leden van 'variabele' niet wijzigen omdat het een 'alleen-lezen variabel type' is
Deze fout treedt op wanneer u probeert leden van een variabele te wijzigen die alleen-lezen is omdat deze zich in een speciale constructie bevindt.
Een gemeenschappelijk gebied dat dit optreedt, is binnen foreach-lussen . Het is een compilatiefout om de waarde van de verzamelingselementen te wijzigen. Daarom kunt u geen wijzigingen aanbrengen in elementen die waardetypen zijn, inclusief structs. In een verzameling waarvan de elementen verwijzingstypen zijn, kunt u toegankelijke leden van elk element wijzigen, maar elke poging om volledige elementen toe te voegen of te verwijderen of te vervangen, genereert compilerfout CS1656.
In het volgende voorbeeld wordt fout CS1654 gegenereerd omdat Book
dit een struct
. Wijzig struct
de fout in een klasse om de fout op te lossen.
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
}
}
}
}
.NET-feedback
.NET is een open source project. Selecteer een koppeling om feedback te geven: