Freigeben über


Compilerfehler CS1654

Aktualisiert: November 2007

Fehlermeldung

"Variable" ist "schreibgeschützter Variablentyp", daher können die zugehörigen Member nicht geändert werden.
Cannot modify members of 'variable' because it is a 'read-only variable type'

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

Dieser Fehler tritt häufig in foreach-Schleifen auf. Wenn Sie versuchen, den Wert der Auflistungselemente zu ändern, tritt ein Kompilierungsfehler auf. Deshalb können Sie an Elementen, bei denen es sich um Werttypen (einschließlich Strukturen) handelt, keine Änderungen vornehmen. In einer Auflistung mit Elementen, bei denen es sich um Verweistypen handelt, können Sie die Member der einzelnen Elemente ändern, auf die Sie Zugriff haben. Bei dem Versuch, vollständige Elemente hinzuzufügen, zu ändern oder zu entfernen, wird jedoch Compilerfehler CS1656 generiert.

Beispiel

Im folgenden Beispiel wird der Fehler CS1654 generiert, da Book den Typ struct aufweist. Um den Fehler zu beheben, ändern Sie struct in eine Klasse.

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
            }

        }
    }
}