Ich versuche herauszufinden, ob es eine Möglichkeit gibt, func (oder eine ähnliche Methode) auf das linke Objekt anzuwenden. Bsp .:C# func <> angewendet auf das Objekt auf der linken Seite
member1.MyFunction()
Hier ist ein vereinfachtes Kontext der Nutzung. Wir haben ClassA, die eine Liste von ClassB enthält und eine Methode, um die Elemente von ClassB zusammenzufassen. Und Klasse B besitzt zwei Attribute memberX und memberY, die vom doppelten Typ sind. Die Funktion ist zu verwenden, um auszuwählen, welches Mitglied von ClassB wir addieren möchten.
Ich habe einen Fehler in der Zeile, wo ich
theSum += TheList[i].TheFunction();
Der Fehler schreiben ist:
CS1061 C# keine Definition für und keine Erweiterung Methode ein erstes Argument enthält die Annahme Typ könnte gefunden werden (fehlt eine Verwendungsrichtlinie oder eine Baugruppenreferenz?)
Kennt jemand eine Problemumgehung? Meine Forschung konnte mich nicht zu etwas führen, das auf die linke Seite der generischen Funktion angewendet wurde.
public class ClassA
{
public List<ClassB> TheList;
public ClassA()
{
ClassB m1 = new ClassB(1, 2);
ClassB m2 = new ClassB(1, 2);
ClassB m3 = new ClassB(1, 2);
TheList= new List<ClassB>() { m1, m2, m3 };
}
private double CalculateSum(Func<double> TheFunction)
{
double theSum = 0;
for (int i = 0; i < TheList.Count(); i++)
{
theSum += TheList[i].TheFunction();
// I'd like to use the previous line instead of having to write
// a function for both of the following.
// theSum += TheList[i].GetMember1();
// theSum += TheList[i].GetMember2();
}
return theSum;
}
}
public class ClassB
{
private double memberX;
private double memberY;
public ClassB(double x, double y)
{
memberX = x;
memberY = y;
}
public double GetMember1() { return memberX; }
public double GetMember2() { return memberY; }
}
Ich versuchte das zu vermeiden, aber da ich die Antworten (und die Suchergebnisse) sehe, glaube ich, dass es keine andere Möglichkeit gibt, Func <> oder andere ähnliche Methoden zu verwenden. –
Siehe mein Update, wenn Sie die Funktion auf das Objekt auf der linken Seite anwenden möchten. –