Всякий раз, когда вы конвертируете VB в C #, ВСЕГДА ВКЛЮЧИТЕ СТРОИТЕЛЬСТВО ОПЦИИ .В этом случае вы увидите сообщение об ошибке еще до того, как нажмете c #.В этом случае VB вернет
Опция Strict On не позволяет сужать неявные преобразования типов между лямбда-выражением и делегатом 'System.Predicate (Of OrderForm)'
Отсюда довольно легко увидеть, что вы пытаетесь неявно привести базовый класс в качестве дочернего класса.Код C #, который люди здесь написали, является правильным, вот эквивалент VB:
Dim inv As Invoice = DirectCast(Invs.Find(Function(someInv As OrderForm) SubPONumber = DirectCast(thePO.SubPONumber, Invoice).SubInvoiceNumber), Invoice)
ОБНОВЛЕНИЕ
Вот версия C # из сообщения @Anthony Pegram:
Invoice inv = (Invoice)Invs.Find(someInv => thePO.SubPONumber == ((Invoice)someInv).SubInvoiceNumber);
Кроме того, я рекомендую вам внести некоторые изменения в ваш шаблон, если это возможно.GetForms()
сейчас возвращает OrderForms
, но позже вы просто предполагаете, что все они Invoices
.Надеюсь, у вас есть логика, чтобы проверить это.Я бы порекомендовал, чтобы GetForms()
действительно возвращал Invoices
в противном случае.