Lezen in het Engels

Delen via


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.

Opmerking

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  
            }  
  
        }  
    }  
}