Błąd kompilatora CS1654
Nie można zmodyfikować elementów członkowskich zmiennej, ponieważ jest to typ zmiennej tylko do odczytu.
Ten błąd występuje, gdy próbujesz zmodyfikować elementy członkowskie zmiennej, która jest tylko do odczytu, ponieważ znajduje się w specjalnej konstrukcji.
Jednym z typowych obszarów, które występuje, jest w pętlach foreach . Jest to błąd czasu kompilacji, aby zmodyfikować wartość elementów kolekcji. W związku z tym nie można wprowadzać żadnych modyfikacji elementów, które są typami wartości, w tym strukturami. W kolekcji, której elementy są typami referencyjnymi, można modyfikować dostępne elementy członkowskie każdego elementu, ale każda próba dodania lub usunięcia lub zastąpienia kompletnych elementów spowoduje wygenerowanie błędu kompilatora CS1656.
Poniższy przykład generuje błąd CS1654, ponieważ Book
jest to struct
. Aby naprawić błąd, zmień wartość na struct
klasę.
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
}
}
}
}
Opinia o produkcie .NET
.NET to projekt typu open source. Wybierz link, aby przekazać opinię: