Exportieren (0) Drucken
Alle erweitern
Erweitern Minimieren
Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Compilerfehler CS1612

Der Rückgabewert "Ausdruck" kann nicht geändert werden, da er keine Variable ist.

Es wurde versucht, einen Werttyp zu ändern, der als Ergebnis eines Zwischenausdrucks ausgegeben wird, aber nicht in einer Variable gespeichert ist. Dieser Fehler kann auftreten, wenn Sie versuchen, eine Struktur in einer generischen Auflistung direkt zu ändern, wie im folgenden Beispiel gezeigt:

List<myStruct> list = {…};
list[0].Name = "MyStruct42"; //CS1612

Um die Struktur zu ändern, weisen Sie diese zunächst einer lokalen Variablen zu, ändern Sie die Variable, und weisen Sie die Variable dann erneut dem Element in der Auflistung zu.

List<myStruct> list = {…};
MyStruct ms = list[0];
ms.Name = "MyStruct42";
list[0] = ms;

Dieser Fehler tritt auf, da Werttypen durch Zuweisung kopiert werden. Beim Abrufen eines Werttyps aus einer Eigenschaft oder einem Indexer erhalten Sie keinen Verweis auf das Objekt selbst, sondern eine Kopie des Objekts. Die zurückgegebene Kopie wird von der Eigenschaft oder dem Indexer nicht gespeichert, da es sich um Methoden und nicht um Speicherorte (Variablen) handelt. Sie müssen die Kopie in einer Variablen speichern und diese deklarieren, bevor Sie sie ändern können.

Bei Verweistypen tritt dieser Fehler nicht auf, da die Eigenschaft oder der Indexer in diesem Fall einen Verweis auf ein vorhandenes Objekt zurückgibt, bei dem es sich um einen Speicherort handelt.

Sie können diesen Fehler beim Definieren der Klasse oder Struktur vermeiden, indem Sie die Eigenschaftendeklaration so ändern, dass der Zugriff auf die Member einer Struktur möglich ist. Beim Schreiben von Clientcode können Sie den Fehler vermeiden, indem Sie eine eigene Instanz der Struktur erstellen, die zugehörigen Felder ändern und die gesamte Struktur dann erneut der Eigenschaft zuweisen. Als dritte Alternative können Sie die Struktur in eine Klasse ändern.

Der Fehler CS1612 tritt auch bei einem Zugriffsversuch auf den Member einer Struktur über eine Eigenschaft einer einschließenden Klasse auf, die die gesamte Struktur zurückgibt, wie im folgenden Beispiel gezeigt:

// CS1612.cs
using System;

public struct MyStruct
{
    public int Width;
}

public class ListView
{
    MyStruct ms;
    public MyStruct Size
    {
        get { return ms; }
        set { ms = value; }
    }
}

public class MyClass
{
    public MyClass()
    {
        ListView lvi;
        lvi = new ListView();
        lvi.Size.Width = 5; // CS1612
           
        
        // You can use the following lines instead.
        // MyStruct ms;
        // ms.Width = 5;
        // lvi.Size = ms;  // CS1612
    }

    public static void Main() 
    {
        MyClass mc = new MyClass();
        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();   
    }
}

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2015 Microsoft