"anonyme Methode" kann nicht in den Delegattyp "System.Action<int>"konvertiert werden

LL0rd

Erfahrenes Mitglied
Hallo Leute,

ich sitze hier gerade vor meinem Programm und .Net hat mir netterweise eine Fehlermeldung rausgeworfen, bei der ich zwar die Worte kenne, aber absolut keine Ahnung habe, was los ist.

Code:
Fehler	1	Da "System.Action<int>" "void" zurückgibt, darf auf ein Rückgabeschlüsselwort kein Objektausdruck folgen.	CImageObjectSet.cs	142	25	Core
Fehler	2	"anonyme Methode" kann nicht in den Delegattyp "System.Action<int>" konvertiert werden, da einige der Rückgabetypen im Block nicht implizit in den Rückgabetyp des Delegaten konvertiert werden können.	CImageObjectSet.cs	142	25	Core

Der Code an der Stelle ist folgender:

Code:
            Parallel.For(0, this.Count, delegate(int i)
            {
                tmpImObj = this[i];
                if (testImObj.type == tmpImObj.type)
                {
                    if (testImObj.IsEqual(tmpImObj))
                    {
                        return i;// existiert!
                    }
                }
            });

An dem return i; regt das Ding sich auf. Habt ihr eine Ahnung, warum?
 

Thomas Darimont

Erfahrenes Mitglied
Hallo,

das steht doch deutlich in der Fehlermeldung...
Durch return i; nimmt der Compiler implizit int als RetunType für die anonyme Methode an was aber nicht mit der verlangten Delegate Sigantur übereinstimmt, dort wird nämlich void als Return Type verlangt. Anstatt return i würde ich die Indizes der "vorhandenen" Elemente in einer IList<int> ablegen.

Gruß Tom
 

LL0rd

Erfahrenes Mitglied
Sorry, aber ich verstehe das leider noch nicht so ganz. Bezieht sich das Return in diesem Fall auf das delegate?

Die Sache ist die, dass ich eigentlich beim ersten Fund die darüberliegende Methode verlassen will, ich brauche nicht alle passenden Objekte, sondern nur eins. Kann ich irgendwie die parallele Schleife abbrechen?