Liste.Fügen Sie zu sein scheint duplizieren von Einträgen. Was ist falsch?
Habe ich eine Klasse wie folgt aus:
public class myClass
{
public List<myOtherClass> anewlist = new List<myOtherClass>;
public void addToList(myOtherClass tmp)
{
anewList.Add(tmp);
}
}
Also nenne ich "addToList" hundert mal, jedes hinzufügen ein einzigartiges Element in der Liste. Getestet hab ich meinen posten, um zu zeigen, dass, bevor ich den "addToList" - Methode, Sie sind einzigartig. Lege ich noch ein line-in zu testen, "tmp", um sicherzustellen, dass es war, was ich erwartet hatte.
Jedoch, wenn ich dies tun (können sagen, myClass-Objekt aufgerufen wird tmpClass):
int i = tmpClass.anewList.Count();
for (int j = 0; j<i; j++)
{
//write out each member of the list based on index j...
}
Bekomme ich die gleiche genaue Element, und es ist der Letzte, der geschrieben wurde, in meiner Liste. Es ist, als wenn, wenn ich, ich bin überschreiben Sie die gesamte Liste mit dem letzten Eintrag habe ich ergänzt.
Helfen? Das macht keinen Sinn.
Ich habe auch versucht die Liste.Einfügen, wo ich bin immer einfügen am Ende oder an der Indexposition 0. Noch kein Würfel. Ja, bin ich doppelt Quelle meine Indizierung richtig ist und wenn ich meine test-ich bin Indizierung durch die einzelnen Elemente.
🙂
UPDATE:
Okay, ich versuchte dies und hatte immer noch das gleiche problem:
foreach(myOtherClass tmpC in tmpClass.anewList)
{
Console.WriteLine(tmpC.theStringInMyClass.ToString());
}
wird und immer noch für jeden der 100 Artikel, ich habe den gleichen string Ausgabe... ich bin sicher, ich mache etwas völlig dumm, aber ich weiß nicht, was noch. Ich bin immer noch 100% sicher, dass der richtige string ist immer übergeben, um mit zu beginnen.
-Adeena
Okay, ich versuchte dies und hatte immer noch das gleiche problem:
foreach(myOtherClass tmpC in tmpClass.anewList)
{
Console.WriteLine(tmpC.theStringInMyClass.ToString());
}
wird und immer noch für jeden der 100 Artikel, ich habe den gleichen string Ausgabe... ich bin sicher, ich mache etwas völlig dumm, aber ich weiß nicht, was noch. Ich bin immer noch 100% sicher, dass der richtige string ist immer übergeben, um mit zu beginnen.
-Adeena
- kannst du ein bisschen mehr code könnte das problem in der Weise, die Sie hinzufügen oder Lesen von der Liste...
- Sie noch nicht gepostet genug code!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben die Signatur Ihrer Methode addToList:
Ist es möglich, dass der Verbraucher von dieser Methode, Sie sind nicht tatsächlich eine neue Instanz zu erstellen?
Sagte Sie, dass Sie anrufen addToList 100 mal. Vermutlich, das ist in einer Schleife. Bei jeder loop-iteration, müssen Sie eine neue Instanz erstellen "myOtherClass", sonst wirst du nur updaten, das gleiche Objekt im Speicher.
Zum Beispiel, wenn Sie den unten, Sie haben 100 Kopien des gleichen Objekts:
Allerdings, wenn Sie Ihre Schleife sieht wie die unten, es wird funktionieren:
Hoffe, das hilft!
In diesem Fall wäre es wahrscheinlich hilfreich sein, um zu sehen, wie Sie sind, überprüfen Sie jedes Einzelteil, um sicherzustellen, dass die Produkte einzigartig. Wenn man zeigen könnte, wird die ToString () - Methode Ihrer Klasse, es könnte helfen: vielleicht stützt es sich auf etwas, das eigentlich die gleichen zwischen jedem Ihrer Objekte. Dies könnte helfen, zu entscheiden, ob Sie wirklich immer das gleiche Objekt zu jeder Zeit, oder, wenn die Stücke unter Berücksichtigung sind wirklich nicht einzigartig.
Auch, statt über den Zugriff auf die durch den index verwenden, sollten Sie
foreach
- Schleife, Wann immer möglich.Schließlich, die Elemente in einer Liste sind nicht universell eindeutig, sondern Verweise auf ein Objekt, die anderswo existiert. Wenn Sie versuchen, um zu überprüfen, dass das abgerufene Element ist einzigartig, mit Bezug auf ein externes Objekt, wirst du scheitern.
Eins noch, glaube ich: Sie wahrscheinlich wollen, um den Zugriff auf
anewList
sein eigenes eher alspublic
.Versuchen das Durchlaufen der Liste mit foreach statt, die durch den index. Ich vermute, dass das problem in dem code, den Sie ausgelassen haben, von Ihrem Beispiel, nicht die Liste selbst.
BEARBEITEN
Haben Sie untersucht die Struktur der Liste im debugger, um sicherzustellen, dass Ihre einzigartigen Gegenstände sind eigentlich Hinzugefügt? Auch, möchten Sie vielleicht die Verwendung
.Count
(die Eigenschaft) statt.Count()
(extension-Methode). Die Erweiterung Methode tatsächlich Durchlaufen Sie die Liste, um die Anzahl der Methoden, während die Eigenschaft ist gerade auf der Suche nach dem Wert einer privaten Variablen, hält der Graf.@James kann auf etwas hier. Wenn Sie nur die änderung der Eigenschaften des Elements, das Sie eingelegt haben und erneut anschließen, anstatt ein neues Objekt erstellen jedes mal, das Ergebnis wäre das Verhalten, das Sie sehen.
Gut aus, ich hab hier gelesen, ich nehme dein problem könnte sein, das hinzufügen von Elementen in der Liste - sind Sie sicher, Sie nicht hinzufügen, die die gleiche Referenz haben, wieder und wieder? Das könnte ein Grund sein, warum Sie haben 100 "letzten Elemente" in der Liste.
Beachten Sie auch, dass, wenn man die genaue form
C# kompilieren preforms eine spezielle Optimierung auf der Schleife. Wenn Sie unterscheiden sich von der syntax (z.B. durch ziehen der Count-Eigenschaft der Schleife in eine eigene varaible, wie Sie in Sie Beispiel), das kompilieren überspringt, Optimierung.
Wird es nicht beeinflussen, was angezeigt wird, aber es wird länger dauern.
Hab! Danke James -
hier ist das dumm, was ich falsch gemacht habe:
Hatte ich:
wenn ich es geändert diese:
Alles war gut. Ich bekomme es. 🙂
Danke für die Hilfe Jungs!
-Adeena