Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Impossibile modificare i membri di 'variable' perché è un tipo di variabile di sola lettura
Questo errore si verifica quando si tenta di modificare i membri di una variabile di sola lettura perché si trova in un costrutto speciale.
Un ambito comune in cui ciò accade è all'interno dei cicli foreach. Si tratta di un errore in fase di compilazione per modificare il valore degli elementi della raccolta. Pertanto, non è possibile apportare modifiche agli elementi che sono tipi valore, inclusi gli struct. In una raccolta i cui elementi sono tipi di riferimento, è possibile modificare i membri accessibili di ogni elemento, ma qualsiasi tentativo di aggiungere o rimuovere o sostituire elementi completi genererà l'errore del compilatore CS1656.
Example
L'esempio seguente genera l'errore CS1654 perché Book è .struct Per correggere l'errore, cambiare struct in classe.
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
}
}
}
}