vikil chandrapati Ответов: 1

Я получаю предупреждение о перегрузке как мне это исправить


<pre>lblSub.Text =
               lbDiscount.Items.Zip(lbPrice.Items)
               .Select((discount, price) =>
                 Convert.ToDecimal(discount) * Convert.ToDecimal(price))
               .Sum()
               .ToString();


я получаю предупреждение для zip, говорящее: "нет перегрузки для метода 'Zip' принимает 1 аргумент", почему это происходит и как это исправить

Что я уже пробовал:

Я попытался полностью удалить функцию zip, но она не сильно исправила это, так как контекст я пытаюсь умножить на разные списки и вывести результат в другой список

1 Ответов

Рейтинг:
0

Richard Deeming

То Zip перегрузка, которая не требует функции проекции, была добавлена в .NET Core 3.0. Если вы используете более раннюю версию .NET Core или если вы используете .NET Framework, вы должны предоставить функцию, которая берет два исходных элемента и объединяет их в один результирующий элемент.

В этом случае вам просто нужно совместить Zip и Select:

blSub.Text = lbDiscount.Items
    .Zip(lbPrice.Items, (discount, price) => Convert.ToDecimal(discount) * Convert.ToDecimal(price))
    .Sum()
    .ToString();
Перечислимый.Метод Zip (System.Linq) | Microsoft Docs[^]


vikil chandrapati

теперь он просто выдает ошибку: "ListBox.ObjectCollection' не содержит определения для 'Zip' и не может быть найден доступный метод расширения 'Zip', принимающий первый аргумент типа 'ListBox.ObjectCollection' (вы пропустили директиву using или ссылку на сборку?)"

Richard Deeming

ListBox.ObjectCollection[^]- это не универсальная коллекция. Сначала вам нужно будет привести предметы к подходящему типу.

Например:

lblSub.Text = lbDiscount.Items.Cast<object>()
    .Zip(lbPrice.Items.Cast<object>(), (discount, price) => Convert.ToDecimal(discount) * Convert.ToDecimal(price))
    .Sum()
    .ToString();