假设我有一个C#类:
public class Node
{
public double A { get; set; }
public double B { get; set; }
}...and包含该类型对象列表的另一个类:
public Buffer
{
private List<Node> _nodes;
...
}现在,假设我需要计算_nodes列表中节点对象的A的值的总和。然后(单独)计算B的和。有没有一种方法可以用一个‘泛型’Sum()方法来实现,而不需要重复代码?
例如,一种方法可以是:
public class Buffer
{
...
private double SumA()
{
double sum;
foreach (Node node in _nodes)
{
sum += node.A;
}
return sum;
}
private double SumB()
{
double sum;
foreach (Node node in _nodes)
{
sum += node.B;
}
return sum;
}
}这里的问题是,SumA()和SumB()实现的基本算法是相同的,但在上面的情况下是重复的。如果Node有更多的属性,需要求和,或者如果Sum()是一个复杂得多的过程(在我目前正在重构的情况下,这两个过程都是正确的),这一点就会变得复杂起来。
因此,换一种方式来说,有没有办法让我只有一个Sum()方法,但让它对列表中需要求和的Node类的任何成员进行操作?
发布于 2013-05-16 21:37:29
您可能还可以为任何列表类型创建扩展方法
public class Buffer
{
private List<Node> _nodes;
private List<double> numsA;
void MyMethod()
{
List<double> numsA = new List<double>();
List<double> numsB = new List<double>();
foreach (Node node in _nodes)
{
numsA.Add(node.A);
numsB.Add(node.B);
}
double sumA = numsA.Sum();
double sumB = numsB.Sum();
}
}
public static class MyExtensions
{
public static double Sum(this List<double> nodes)
{
double sum = 0;
foreach (double node in nodes)
{
sum += node;
}
return sum;
}
} https://stackoverflow.com/questions/16588631
复制相似问题