Auf Englisch lesen

Freigeben über


Compilerfehler CS1654

Member von "Variable" können nicht geändert werden, da es sich um einen "schreibgeschützten Variablentyp" handelt.

Dieser Fehler tritt auf, wenn Sie versuchen, Member einer Variablen zu ändern, die schreibgeschützt ist, da sie sich in einem speziellen Konstrukt befindet.

Häufig ist dieser Fehler im Bereich von forEach -Schleifen zu finden. Dieser Fehler tritt während der Kompilierung auf, wenn der Wert der Auflistungselemente geändert wird. Daher können Sie keine Änderungen an Elementen vornehmen, die Werttypensind (einschließlich Strukturen). In einer Auflistung, deren Elemente Verweistypensind, können Sie zugängliche Member der einzelnen Elemente ändern, aber bei jedem Versuch, vollständige Elemente hinzuzufügen, zu entfernen oder zu ersetzen, wird Compiler Error CS1656generiert.

Beispiel

Im folgenden Beispiel wird der Fehler CS1654 generiert, da Book eine Struktur ( struct) ist. Um den Fehler zu beheben, ändern Sie die Struktur ( struct ) in eine Klasse ( class).

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