Вызов метода с оператором точки в списке объектов - PullRequest
0 голосов
/ 17 октября 2018

Я относительно новичок в 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, который передается как аргумент)

EDIT: Add () был просто примером(как это было легко продемонстрировать для примитивных типов данных).Я ничего не добавляю, я просто хочу получить доступ как к списку вызывающих абонентов, так и к списку пропущенных в одной и той же функции, которая вызывается оператором точки.

Ответы [ 3 ]

0 голосов
/ 17 октября 2018

Как реализовать такой метод в классе "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.

Но опять же, я уверен, что это не то, чего хотел ваш учитель, пожалуйста, спросите ихуточнить задание.

0 голосов
/ 17 октября 2018

Не совсем понятно, что вы имеете в виду, но я, думаю, вы хотите добавить сумму значений .Value в каждом элементе в списке A к сумме свойств .Value в списке B.

Для этого вы можете написать метод расширения для 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);

0 голосов
/ 17 октября 2018

Чтобы получить сумму значений объекта, используйте пространство имен System.Linq.Поместите 'System.Linq' в блок использования.(Начало вашей программы).Это довольно полезная библиотека.Здесь информационная ссылка LINQ

«Союз» создает одну общую коллекцию, удаляя дубликаты, а Sum - суммирует ваши значения объектов.«Конкат» создает одну простую общую коллекцию, включающую все ваши элементы.

    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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...