Я пытаюсь выяснить, есть ли способ использовать func (или аналогичный метод), примененный к левому объекту. Ex .:C# func <> применяется к объекту слева
member1.MyFunction()
Вот упрощенный контекст использования. Мы получили ClassA, который содержит список ClassB и метод для суммирования элементов класса B. И classB обладают двумя атрибутами memberX и memberY, которые имеют двойной тип. Функция func должна использоваться для выбора члена ClassB, который мы хотели бы суммировать.
Я получил сообщение об ошибке в строке, где я пишу
theSum += TheList[i].TheFunction();
Ошибки:
CS1061 C# не содержит определение и не метод расширения принимающего первый аргумент (вы не можете найти директиву по использованию или ссылку на сборку?)
Кто-нибудь знает обходной путь? Мое исследование не могло привести меня к чему-либо, примененному к левой стороне общей функции.
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; }
}
Я пытался избежать этого, но, видя ответы (и результаты поиска), я считаю, что нет другого способа использования Func <> или любых других подобных методов. –
См. Мое обновление, если вы хотите применить func к объекту слева от него. –