gpt4 book ai didi

c# - 传递指向类属性的指针

转载 作者:行者123 更新时间:2023-11-30 13:58:51 25 4
gpt4 key购买 nike

编辑: 这是一个示例程序,我了解到 linq 中有求和运算符。但是,我试图具体询问如何将指针传递给属性以用它做一些复杂的事情,不一定是这个求和算法。

假设我有这样一个类:

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 委托(delegate),但这是一个属性,所以我不确定它是如何翻译的。

那么我如何将这些功能组合成类似这样的东西:

double bothFunctions(List<Point> PointList, var propertyToUse)
{
double sum = 0.0;
foreach(Point p in PointList)
{
sum += p.propertyToUse;
}
return sum;
}

其中 propertyToUse 指向 X 或 Y。

最佳答案

当前的解决方案效果很好,但它们假设您的操作是sum,或者您只有两个可能的属性(XY)。

如果你想要更多的自由,你可以这样做:

double function(List<Point> PointList, Func<Point, double> selector)
{
double sum = 0.0;
foreach (Point p in PointList)
{
sum += selector(p);
}
return sum;
}

然后你这样调用它:

double sumX = function(PointList, p => p.X);
double sumY = function(PointList, p => p.Y);

你将能够编写更复杂的选择器,例如:

double sumXY = function(PointList, p => p.X + p.Y);

关于c# - 传递指向类属性的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15101006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com