2009-07-29 2 views
1

Ich habe diesen Code, um eine Liste der Fondsquellen für unsere Organisation zurückzugeben.Das Hinzufügen von Elementen zur Liste führt zu Duplikaten. Was ist ein besserer Weg?

Das Problem ist, dass, wenn ich die resultierende FundSourceList durchlaufen alle zeigt es ist der letzte Wert. Zum Beispiel, wenn ich drei Fondsquellen habe (staatlich, föderativ, sportlich), dann, wenn ich diesen Code zum Durchschleifen verwende, werde ich gelistet als athletisch, athletisch, athletisch.

For Each FundSource In FundSources 
     Debug.Print(FundSource.FundDescription) 
    Next 

Also ändere ich den Code zu diesem. Ich habe die Erstellung der fs-Variable innerhalb der Schleife verschoben.

Das funktioniert gut, aber jetzt erstelle ich eine neue Klasse immer und immer wieder. Es scheint mir ein wenig ineffizient. Kann ich die Klasse nicht außerhalb der Schleife erstellen und immer wieder verwenden? Vielen Dank.

+0

+1 für die Frage, weil der Betreff informativ ist, die Tags richtig aussehen, und alles klar genug ist, dass ein nonVB.NET-Benutzer (das bin ich) den Kern bekommt. – Smandoli

Antwort

0

Sie erstellen keine Klasse - die Klasse ist die Codedefinition für die Methoden und Eigenschaften. Wenn Sie die Operation New verwenden, erstellen Sie eine Instanz dieser Klasse, die zu einem Objekt führt. Wenn Sie eine Liste von Objekten wie FundSourceList haben, möchten Sie, dass die darin enthaltenen Objekte einzelne Objekte sind. Also, die Lösung, die Sie unten haben, ist richtig. Sie erwähnen Effizienzaspekte - wenn Sie das Objekt instanziieren, wird im Grunde alles, was passiert (in diesem Fall), Speicher zugewiesen, um die Variablen (und einige Referenzen für den verwalteten Speicher) zu speichern, aber Sie müssen sich darüber keine Gedanken machen Hier). Dies ist notwendig und ist unter der Haube optimiert, so dass Sie sich auch keine Sorgen machen müssen.

1

Wenn Sie 3 Fundquellen haben, benötigen Sie drei FundSource-Objekte. So einfach ist das. Ich weiß nicht, was daran ineffizient ist ...

Wie können Sie 3 Fundquellen zu Ihrer Liste hinzufügen, sondern nur eine erstellen?

0

Sie können das Objekt nicht außerhalb der Schleife instanziieren, um das gewünschte Ergebnis zu erzielen.

Dies liegt daran, dass Ihr Objekt ein Referenz Typ wäre.

Durch Instanziierung außerhalb der Schleife würden Sie einen Verweis auf Ihr Objekt erstellen.

Wenn Sie Ihre Ergebnisse durchlaufen und die Eigenschaften festlegen, verwenden Sie dieselbe Referenz immer wieder.

Alles, was Sie der Liste bei jeder Iteration hinzufügen, ist dieselbe Referenz, die sich am Ende der Schleife auf ein Objekt bezieht, das die letzten Werte in Ihrer Ergebnismenge enthält.

Durch das Erstellen neuer Objekte in der Schleife erstellen Sie neue Referenzen, von denen jede auf eine neue FundSource verweist. Ihre Schleife schreibt jetzt in ein neues Objekt und erhält die gewünschten Ergebnisse.

Verwandte Themen