Ler em inglês

Compartilhar via


Erro do Compilador CS1654

Não é possível modificar os membros da "variável" porque ela é um "tipo de variável somente leitura"

Esse erro ocorre quando você tenta modificar membros de uma variável somente leitura porque ela está em um constructo especial.

Uma área comum em que isso ocorre é dentro de loops foreach. É um erro em tempo de compilação modificar o valor dos elementos da coleção. Portanto, você não pode fazer modificações em elementos que são tipos de valor, incluindo structs. Em uma coleção cujos elementos são tipos de referência, você pode modificar membros acessíveis de cada elemento, mas qualquer tentativa de adicionar, remover ou substituir elementos completos vai gerar o Erro do Compilador CS1656.

Exemplo

O exemplo a seguir gera o erro CS1654 porque Book é um struct. Para corrigir o erro, altere struct para uma 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  
            }  
  
        }  
    }  
}