Číst v angličtině

Sdílet prostřednictvím


Chyba kompilátoru CS1654

Nelze změnit členy proměnné, protože se jedná o typ proměnné jen pro čtení.

K této chybě dochází při pokusu o úpravu členů proměnné, která je určena jen pro čtení, protože je ve speciální konstruktoru.

Jednou z běžných oblastí, ke které dochází, je ve smyčce foreach . Jedná se o chybu v době kompilace pro úpravu hodnoty prvků kolekce. Proto nelze provádět žádné úpravy prvků, které jsou typy hodnot, včetně struktur. V kolekci, jejíž prvky jsou odkazové typy, můžete upravit přístupné členy každého prvku, ale všechny pokusy o přidání nebo odebrání nebo nahrazení úplných elementů vygenerují chybu kompilátoru CS1656.

Příklad

Následující příklad generuje chybu CS1654, protože Book je .struct Chybu opravíte tak, že změníte structtřídu.

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