Eine Eigenschaft oder ein Indexer kann nicht als out- oder ref-Parameter übergeben werden.



  • Hey,

    ich hab folgende Frage: Ich habe eine List (s.u.) die ich in einer Form erstelle.

    Nun will ich einen Teil der Liste an eine Child-Form weiterleiten als ref.

    public class MyClass
    {
        public List<Measurement> Measurements { get; set; }
    }
    
    MyClass controller = new MyClass();
    FormChild dummy = new FormChild( ref (controller.Measurements[0]));
    

    und die Child Form hat den entsprechenden Konstruktor

    public FormChild(ref Measurement damn)
    {
      InitializeComponent();
      // mache hier was mit dem parameter
    }
    

    Aber als Fehlermeldung erhalte ich:

    Eine Eigenschaft oder ein Indexer kann nicht als out- oder ref-Parameter übergeben werden.

    Hat einer eine Idee warum?!



  • ref und out können nur bei direkten Variablen (bzw. fields) benutzt werden, nicht bei Eigenschaften (und auch ein Indexer ist eine Eigenschaft, d.h. besteht aus einer Get- und Set-Methode).

    Als Ausweg ginge:

    MyClass controller = new MyClass();
    Measurement m = controller.Measurements[0];
    FormChild dummy = new FormChild( ref m );
    controller.Measurements[0] = m;
    

    Benötigst du denn überhaupt den Parameter als Referenz, d.h. willst du innerhalb der Methode (bzw. Konstruktor) dem Parameter ein neues Objekt (per Zuweisung oder mittels new) zuweisen?
    Wenn du nur die Eigenschaften bzw. Member von dem Measurement-Objekt ändern willst, dann brauchst du kein 'ref' anzugeben (außer Measurement wäre als 'struct' deklariert und nicht als 'class').

    P.S. Gestern gab es im MyCSharp-Forum eine ähnliche Frage: http://www.mycsharp.de/wbb2/thread.php?threadid=87256 (inkl. Link auf Artikel dazu: http://www.mycsharp.de/wbb2/thread.php?threadid=12251 )


Anmelden zum Antworten