首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将方法应用于类的成员

将方法应用于类的成员
EN

Stack Overflow用户
提问于 2013-05-16 21:21:40
回答 5查看 146关注 0票数 2

假设我有一个C#类:

代码语言:javascript
运行
复制
public class Node
{
    public double A { get; set; }
    public double B { get; set; }
}

...and包含该类型对象列表的另一个类:

代码语言:javascript
运行
复制
public Buffer
{
    private List<Node> _nodes;
    ...
}

现在,假设我需要计算_nodes列表中节点对象的A的值的总和。然后(单独)计算B的和。有没有一种方法可以用一个‘泛型’Sum()方法来实现,而不需要重复代码?

例如,一种方法可以是:

代码语言:javascript
运行
复制
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类的任何成员进行操作?

EN

Stack Overflow用户

发布于 2013-05-16 21:37:29

您可能还可以为任何列表类型创建扩展方法

代码语言:javascript
运行
复制
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;
    }
} 
票数 0
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16588631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档