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.
Následující příklad generuje chybu CS1654, protože Book
je .struct
Chybu opravíte tak, že změníte struct
třídu.
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
}
}
}
}
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby: