Sehen Sie sich den Callstack an und Sie werden sehen, welche Funktion immer wieder ausgeführt wird. Wenn dies nicht möglich ist (weil es beispielsweise in einer Produktionsumgebung ausgeführt wird), geben Sie weitere Informationen ein.
über das, was die aufgerufenen Eigenschaften aufrufen, wo diese Funktion aufgerufen wird usw.
Wenn AccountId
etwas nicht-triviales tut ( alles außer Zugang zu einem lokalen Feld), dann ist das die wahrscheinlichste Wette.
Eine interessante Tatsache ist, dass technisch Sort
erfordert, dass die Reihenfolge transitiv ist, und der Zeichenfolgenvergleich ist nicht immer transitiv ! Dies würde jedoch selten zu einem Stackoverflow führen (es sei denn, die Methode Sort
verwendet eine Art von FP-Ansatz); es könnte dazu führen, dass es für immer läuft, aber ich glaube, dass die eingebauten Typen sogar dies abgedeckt haben (sie prüfen auf die theoretische maximale Lauflänge und brechen ab, IIRC).
Ich würde auf AccountId
schauen; wenn es etwas "cleveres" tut (wie lazy-load etwas Wert von einer Eltern-Sammlung), sind die Chancen, dass der Fehler in der "clever" ist.
Also hatte ich eine schwierige Situation, in der ich StackOverflow-Ausnahmen in einer Vergleichsmethode bekam.
Meine Vergleichsmethode:
%Vor%Mein Operator:
%Vor% Was also passiert ist, war der Operator ==, der die Equals-Methode aufgerufen hat, die dann den Operator == aufgerufen hat, als sie die Zeile this == rhs
ausgeführt hat. Die Lösung bestand darin, die Zeile in Object.ReferenceEquals(this, rhs)
zu konvertieren.
Sind die Konten als List<Account>
deklariert?
Ich frage mich, ob Accounts
eine Eigenschaft ist, die als etwas anderes als List<Account>
deklariert ist - zum Beispiel als IList<Account>
- und Sie haben irgendwo eine statische Helferklasse mit einer Sort
Erweiterungsmethode, die isn ist 't richtig implementiert. Dies könnte versuchen, die List<T>.Sort
-Methode zu nutzen, wenn der übergebene Parameter ein List<T>
ist, jedoch ohne die erforderliche Umwandlung in List<T>
durchzuführen, was zu einer garantierten StackOverflowException
führt.
Was ich meine ist das. Angenommen, Account
ist eine Eigenschaft einer Klasse, die etwa so aussieht:
Und dann nehmen Sie an, dass Sie diese statische Klasse mit einer Sort
Erweiterungsmethode haben:
In diesem Fall würde der von Ihnen gepostete Code ein StackOverflowException
ausgeben.
Vielleicht ist Accounts
ein Objekt einer benutzerdefinierten Erfassungsklasse, deren Methode Sort
sich selbst nennt?
Vielleicht nennt sich die Eigenschaft AccountId
selbst?
StackOverflowException
s tritt normalerweise auf, wenn Sie einen rekursiven Aufruf ausführen, der nicht aktiv ist. Überprüfen Sie, ob sich Sort
oder AccountId
selbst aufrufen. Wenn ja, überprüfen Sie die Basisfälle für diese rekursiven Funktionen und stellen Sie sicher, dass sie anhalten, wenn sie aufhören sollen.
Nur weil diese Zeile den StackOverflow wirft, bedeutet das nicht, dass es die Ursache des Problems ist, z. B.
%Vor%Dies ist so wahrscheinlich, dass ein Stapelüberlauf auf b () auftritt, wie bei dem rekursiven Aufruf von methodA ();
Ich vermute, dass die Rekursion auf der Methode um diese Codezeile herum liegt.
Tags und Links .net c# lambda sorting stack-overflow