der henry: C# ref übergabe

Hallo,

ich habe meine erste Funktion an die ich eine Referenz übergeben muss. Auf diese Referenz schreibt die Funktion dann Ihren Rückgabewert.

Laut Doku: "ref T[] Buffer"

Diese Funktion wird in einer Schleife aufgerufen.

Da ich nicht einfach ein Array übergeben kann, ich muss die Zuordnung behalten, habe ich mir gedacht ich nehme eine List, erzeuge einen key und beschreibe diesen key.value mit "0"


	Dictionary<string, string> memList = new Dictionary<string, string>();


// In der Schleife jeweils 

	memList[record.Plcvarname] = "0";

... und dann würde ich ... wie auch immer den "memList[record.Plcvarname]" als Referenz übergeben.

... so die Theorie ...

jetzt wird aber ein "assignable variable" benötigt ... ??????

Wie kann ich dieses Problem lösen ..., oder bin ich komplett falsch ???

Vielen Dank !!!

  1. Hallo Henry,

    memList ist ein Dictionary, kein Array. [] im Dictionary führt auf eine Setter-Methode.

    Entweder übergib Dictionary und Key getrennt, oder, wenn möglich, gib dem neuen Wert einfach aus der Funktion zurück und weise ihn dann zu.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo Rolf,

      je länger ich meinen Beitrag lese, desto verwirrter werde ich selbst.

      Ich hoffe hier besser erklärt.

      Ich habe eine Funktion Reader.Read() die vor dem eigentlichen lesen, über eine Schleife mit Daten Reader.Add versorgt wird.

      Beim Aufruf von Reader.Add muss ich jeweils eine Referenz (Doku: ref T[] Buffer) übergeben in die, nach dem Aufrufer Reader.Read, meine "gelesenden Daten" stehen.

      Um eine Zuordnung zu bekommen, habe ich ein Dictionary, mit Array erstellt. Bei jedem Schleifendurchgang füge ich einen "record" zum Dictionary hinzu, das einen Namen (Plcvarname) und einen value="" enthält.

      Diesen "record" des Dictionary bzw. die Referenz zum jeweiligen Wert des "records" möchte ich an die Funktion Reader.Add übergeben. Damit habe ich Namen und Wert und die Zuordnung passt.

      		
      Dictionary<string, string[]> plcreturns = new Dictionary<string, string[]>();
      
      for-Schleife
      {
      
      	// Speicherbereich für Rückgabe vorbereiten
      		plcreturns.Add(record.Plcvarname, new string[] {""});
      				
      		Reader.Add(
      				readmemtype(record.Datatyp, record.Plcvarname),	
      				readformat(record.Format, record.Plcvarname),
      				record.Db,	
      				record.dataoffset,	
      				(int) 1,
      				ref plcreturns[record.Plcvarname][0]
        		);
      			
      };			
      
      int result = Reader.Read(); 			
      

      Die Referenzübergabe ref plcreturns[record.Plcvarname][0] funktioniert nicht

      Vllt liege ich komplett falsch und es gibt eine bessere Lösung ....

      Vielen Dank !!

      1. Hallo Henry,

        Was für ein Objekt ist Reader? Irgendwas von MySQL? Jedenfalls kein MySqlDataReader. Der kennt kein Add. Was du da tust, ist mir reichlich unverständlich.

        Aber wenn dieser ominöse Reader unbedingt einen ref Parameter bei Add sehen will, musst du wohl eine temporäre Variable spendieren und deren Wert nachher im Dictionary speichern.

        Das [] des Dictionary ist kein Arrayzugriff, sondern ein Indexer-Property und Propertys lassen sich nicht als Referenz übergeben, weil ein Property ein Trio aus Datenspeicher, Getter und Setter ist. Kein Field. Für ein Field und ein Arrayelement kannst du Referenzen erstellen. Nicht für ein Property.

        Rolf

        --
        sumpsi - posui - obstruxi