Baca dalam bahasa Inggris

Bagikan melalui


Kesalahan Kompiler CS1654

Tidak dapat memodifikasi anggota 'variabel' karena ini adalah 'jenis variabel baca-saja'

Kesalahan ini terjadi ketika Anda mencoba memodifikasi anggota variabel yang hanya dibaca karena berada dalam konstruksi khusus.

Salah satu area umum yang terjadi ini adalah dalam perulangan foreach. Ini adalah kesalahan waktu kompilasi untuk memodifikasi nilai elemen kumpulan. Oleh karena itu, Anda tidak dapat melakukan modifikasi apa pun pada elemen yang merupakan jenis nilai, termasuk struktur. Dalam koleksi yang elemennya adalah jenis referensi, Anda dapat memodifikasi anggota yang dapat diakses dari setiap elemen, tetapi setiap upaya untuk menambahkan atau menghapus atau mengganti elemen lengkap akan menghasilkan Kesalahan Kompiler CS1656.

Contoh

Contoh berikut menghasilkan kesalahan CS1654 karena Book merupakan struct. Untuk memperbaiki kesalahan, ubah struct kekelas.

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