Gut, also erst einmal ist hier etwas schief gelaufen:
C#-Quelltext
1: 2: 3:
| signInt = intSig; signExt = extSig; metaData = meta; |
ich vermute mal, das sollte so aussehen:
C#-Quelltext
1: 2: 3:
| signInt intSig; signExt extSig; metaData meta; |
Und ich gehe auch mal davon aus, dass die nicht deklarierten Variablen in der ersten Methode irgendwo anders deklariert wurden, aber für das Beispiel nicht relevant sind.
Wirklich verstanden habe ich aber trotzdem nicht, was du vor hast.
Ich habe versucht, die Möglichkeiten zu erklären, die mir einfielen, vielleicht habe ich ja den Kern des Problemes getroffen oder angeschnitten, dass es trotzdem hilft:
Du hast eine Liste, der mit jedem Aufruf der Methode "ErzeugeFluss" ein neues Element hinzu gefügt wird. Die Meta-Daten sollen aus den bereits vorhandenen Daten erstellt werden und dann ebenfalls hinzu gefügt werden, aber wozu brauchst du dafür eine extra Methode und durchläufst dabei jedes mal die komplette Schleife?
So hast du nämlich das Problem, dass mit jedem neuen Element alle vorherigen Elemente plus dem Neuen durchlaufen und verarbeitet werden. Wenn du also nach einander 10 Elemente hinzu fügst, wird das erste Element 10 mal durchlaufen, das zweite Element 9 mal, das Dritte 8 mal, und so weiter. Da sehe ich keinen Sinn drin.
So oder so, wenn dann die Meta-Daten aus den zwei bereits vorhandenen Attributen von jedem Element erzeugt werden, kannst du das doch auch gleich im Konstruktor von dataFlow erledigen lassen, für den Fall, wenn keine gesonderten Meta-Daten angegeben wurden. Da bietet es sich ja an, den zu überladen. Dann musst du dich in der Handhabung mit der Liste gar nicht mehr darum kümmern.
Was ich in ähnlichen Fällen auch mache: Ich erstelle für eine Eigenschaft, die sich aus Anderen zusammen setzt, gar nicht erst ein privates Attribut um es dort zu speichern, sondern lasse sie in der get-Methode berechnen. Das gibt dann allerdings Komplikationen, wenn du noch eine set-Methode bereit stellen willst, denn dann müsstest du aus den Meta-Daten die beiden anderen Attribute heraus bestimmen können, oder eben nicht, wenn das nicht wichtig ist.
Wenn du das alles nicht willst, dann rufe aus der Schleife heraus einfach die passende Eigenschaft auf:
C#-Quelltext
1:
| container[i].callMetaData = meta; |
(Warum du das "dataFlow" noch vor container gehängt hast, verstehe ich auch nicht)
Und dennoch bedeutet die Schleife, dass die Meta-Daten in jedem Element für die vorhandenen und wahrscheinlich gleich bleibenden zwei anderen Attribute immer neu berechnet werden, wobei sich das Ergebnis sich ja nicht ändert, solange keine sich ändernden Einflüsse dazu kommen. Aber in so einem Fall lasse ich dann gerne das Attribut immer direkt innerhalb der ändernden Methode updaten, oder eben direkt in der Eigenschaft errechnen, aber das habe ich ja schon erwähnt.
Wenn du allerdings die Meta-Daten aus allen bereits vorhandenen Elementen erstellen lassen willst, dann ergibt die Schleife durchaus Sinn, auch wenn ich das dann nicht in eine extra Methode auslagern würde, aber das hängt dann wohl von dem konkreten Fall ab.
Aber auch hier ist der Unterschied zu vorher nicht so groß, du müsstest allerdings eine Variable für die Meta-Daten vor der Schleife deklarieren, dann in der Schleife entsprechend mit jedem Element so abändern, dass danach das richtige Ergebnis da steht und danach in einer zweiten Schleife jedem Element von "container" die neuen Meta-Daten zuweisen, auch hier gilt dann wieder:
C#-Quelltext
1:
| container[i].callMetaData = meta; |
Ich hoffe mal, ich habe irgendwo den Punkt getroffen, ansonsten melde dich einfach wieder und schildere am besten noch einmal dein Problem. ^^