在对象列表上使用点运算符的调用方法

时间:2018-10-17 13:43:24

标签: c# list

我是C#的新手,在我的作业中,我被要求创建一个对象列表:

var A = new List<ObjectName>;

然后通过进行此类函数调用来对此列表进行操作

int sum = A.Add(B); //B is also a List<ObjectName>

如何在“ ObjectName”类中实现此类方法,我知道您可以对原始数据类型执行以下操作:

   public int Add(ObjectName B){
        return this.Value + B.Value
}

在处理列表时,我该怎么做? (以防万一,我想获取正在调用函数Add()的整个列表以及作为参数传递的整个列表B)

编辑:Add()只是一个示例(因为很容易演示原始数据类型)。我没有添加任何内容,我只想访问调用者列表以及通过点运算符调用的同一函数中的传递列表。

3 个答案:

答案 0 :(得分:1)

  

如何在“ ObjectName”类中实现此类方法

您不能。该方法适用于List<>,您在课堂上所做的任何更改都不会改变。 我强烈建议您请老师澄清这一点。

您可以通过添加扩展方法来编译语法:

public static class ListOfObjectNameExtension
{
    public static int Add(this List<ObjectName> a, List<ObjectName> b)
    {
        // no idea what the result should actually be...
        return 42;
    }
}

以下内容:

int sum = A.Add(B);

现在将进行编译,因为我们将List<ObjectName>扩展为具有.Add方法。

但是再次,我确定这不是您的老师想要的,请去问问他们以澄清任务。

答案 1 :(得分:0)

要使用System.Linq命名空间对对象值求和。 将“ System.Linq”放入使用块。 (程序的顶部)。 这是一个非常有用的库。这里的信息链接LINQ

'Union'使一个通用集合消除重复和Sum-汇总对象的值。 “ Concat”构成了一个简单的常规集合,其中包括您的所有元素。

    public int MakeSumWithoutDuplications(List<ObjectName> a, List<ObjectName> b)
    {
        return a.Union(b).Sum(x => x.Value);
    }

    public int MakeGeneralSum(List<ObjectName> a, List<ObjectName> b)
    {
        return a.Concat(b).Sum(x => x.Value);
    }

答案 2 :(得分:0)

您的意思还不是很清楚,但我想您要将列表A中每个项目的.Value值的总和添加到列表B中.Value属性的总和。

为此,您可以为List编写扩展方法:

public static class ListExtensions
{
    public static int SomeAddOperation(this List<ObjectName> listA, List<ObjectName> listB)
    {
        int sumA = 0;
        foreach(var someObject in listA)
        {
            sumA += someObject.Value;
        }

        int sumB = 0;
        foreach(var someObject in listB)
        {
            sumB += someObject.Value;
        }        

        return sumA + sumB;
    }
}

然后,您这样称呼它:

int sum = A.SomeAddOperation(B);