Редактировать: Это пример программы, я понимаю, что в linq есть оператор sum. Тем не менее, я пытался спросить конкретно, как передать указатель на свойство, чтобы сделать с ним что-то сложное, не обязательно этот алгоритм суммирования.Передача указателя на свойство класса
Допустим, у меня есть класс, как это:
class Point
{
double x {get; set;}
double y {get; set;}
}
и в моей основной программе у меня было 2 функции.
double function1(List<Point> PointList)
{
double sum = 0.0;
foreach(Point p in PointList)
{
sum += p.x;
}
return sum;
}
double function2(List<Point> PointList)
{
double sum = 0.0;
foreach(Point p in PointList)
{
sum += p.y;
}
return sum;
}
Эти функции полностью идентичны за исключением того, один суммированием значений X, а другой суммированием значений Y. Поскольку они настолько похожи, я хотел бы объединить их так, что я в основном перехожу в этот список точек, и что-то, чтобы определить, что я хочу сделать X или Y основе расчета.
Я знаю, что могу поставить оператор switch и сказать ему, был ли он X или Y на основе перечисления, или число, которое определено, чтобы сказать ему, чтобы сделать X или Y. Если это было нормальная функция, я полагаю, я мог бы использовать s-делегат, но это свойство, поэтому я не уверен, как это переводится.
Так как я совмещаю эти функции во что-то вроде:
double bothFunctions(List<Point> PointList, var propertyToUse)
{
double sum = 0.0;
foreach(Point p in PointList)
{
sum += p.propertyToUse;
}
return sum;
}
Где propertyToUse указывает либо X или Y.
'PointList', очевидно, не может быть параметром' out'. Вы уверены, что этот код в порядке? – jdehaan
В моей реальной программе это должно быть вне, но для этого примера это не так, я удалю это. – Xantham
@ Xantham в этом случае указатель - это просто делегат. См. Мой ответ. –