CS1654 de erro do compilador
Mensagem de erro
Não é possível modificar membros de 'variável' porque ele é um 'somente leitura tipo de variável'
Este erro ocorre ao tentar modificar os membros de uma variável que é somente leitura porque ele está em uma construção especial.
Uma área comum que isso ocorre é dentro de foreach loops.É um erro de time de compilar para modificar o valor dos elementos de coleção.Portanto, você não pode fazer qualquer modificação aos elementos que são tipos de valor, incluindo structs.Em uma coleção cujos elementos são tipos de referência, é possível modificar membros acessíveis de cada elemento, mas qualquer tentar adicionar ou remover ou substituir elementos completos gerará CS1656 de erro do compilador.
Exemplo
O exemplo a seguir gera erro CS1654 porque Book é um struct. Para corrigir o erro, altere o struct para um 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
}
}
}
}