Ler em inglês

Partilhar via


Erro do compilador CS1654

Não é possível modificar membros de 'variável' porque é um 'tipo de variável somente leitura'

Este erro ocorre quando você tenta modificar membros de uma variável que é somente leitura porque está em uma construção especial.

Uma área comum em que isso ocorre é dentro de loops foreach . É um erro em tempo de compilação para modificar o valor dos elementos de 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 gerará o erro do compilador CS1656.

Exemplo

O exemplo a seguir gera o erro CS1654 porque Book é um structarquivo . Para corrigir o erro, altere o struct para uma classe.

C#
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  
            }  
  
        }  
    }  
}