Я хочу вернуть объект в результате вычисления в методе, но я получаю «Невозможно неявно преобразовать тип« ConsoleApp2Iteration.LoanOut »в« double ». «Возврат нового LoanOut» подчеркнут. Что не так? Мне нужны три выхода (InterestPaymentAnnual и т. Д.) В качестве входных данных для других расчетов в другом месте.

public class Loan
{  
 > initialisers here  
    public double LoanCalc()
    {
        double nper = LoanYrs * NprPrYr;//payment terms per yr  
 `double EffectiveRate = Math.Pow(1 + (InterestPct + ContribPct),  
(Math.Pow(NprPrYr, -1))) - 1;`   
//interest per payment term
        double Interest_Contribution = InterestPct + ContribPct;
        double length = nper;
        double InterestPaymentP1 = 0;
        {
            Pymnt = Financial.Pmt(EffectiveRate, nper, LoanNPV, 0, 0);
            LoanOutstanding = LoanNPV;           
        for (int i = 1; i <= length; i++)
             {
// code block removed for clarity   
            if (i % NprPrYr != 0)
// testing for full years as derived calculations use input inyears                    
                    {
                    InterestPaymentAnnual += Interest_ContributionUSD;
                    RePymntAnnual += RePymnt;
                    }
            else
                   {
                    InterestPaymentAnnual += Interest_ContributionUSD;
                    RePymntAnnual += RePymnt;
 // new object which containts annual interest payment, annual repayment and    
 //   remaining loan amount
                   return new LoanOut(InterestPaymentAnnual, RePymntAnnual,    
                    LoanOutstanding);
 //initialisation before new payment cycle
                    InterestPaymentAnnual = 0;
                    RePymntAnnual = 0;
                }
            }
        }
        return InterestPymntP1;
    }
}

public class LoanOut
{
    public double InterestPaymentAnnual { get; private set; }
    public double RePymntAnnual { get; private set; }
    public double LoanOutstanding { get; private set; }
    double InterestPymntP1 = 0;
    double Repayment = 0;
    double DebtRemaining = 0;
     public LoanOut(double InterestPaymentAnnual, double RePymntAnnual, 
     double LoanOutstanding)
    {
        this.InterestPaymentAnnual = InterestPymntP1;
        this.RePymntAnnual = Repayment;
        this.LoanOutstanding = DebtRemaining;
    }
}
c#
1
Aurelius 4 Сен 2017 в 18:25

4 ответа

Лучший ответ

Как уже говорили другие, вы пытаетесь вернуть как экземпляр LoanOut, так и double.

return new LoanOut(InterestPaymentAnnual, RePymntAnnual, LoanOutstanding); //Returning LoanOut Instance

И

return InterestPymntP1; //Returning double

Если вам нужно (или вы хотите) получить два значения из вызова метода, вы должны посмотреть на out параметры. НАПРИМЕР.

public LoanOut LoanCalc(out double InterestPayment)
{
    //Your stuff here
}

Вы должны назначить InterestPayment для вызывающего кода, чтобы использовать его.

В качестве альтернативы вы можете изменить класс LoanOut так, чтобы он также содержал информацию «InterestPayment» об этом объекте. Вы бы НЕ сделали этого, если информация InterestPayment не относится к экземпляру LoanOut ... что, возможно, не так.

Кроме того, если вы исправите это и сохраните метод структурированным, как показано в вашем вопросе, у вас будет недоступный код сразу после строки return new LoanOut ...

InterestPaymentAnnual = 0;
RePymntAnnual = 0;

Никогда не будет работать

0
Skintkingle 4 Сен 2017 в 15:48

У вас есть метод public double LoanCalc(), но вы пытаетесь return new LoanOut(). Итак, ошибка правильная, вы не можете преобразовать LoanOut в double. Измените подпись метода, чтобы она возвращала LoanOut.

Кроме того, если форматирование вставленного кода является тем, что есть в вашем редакторе, я настоятельно рекомендую переформатировать код, чтобы сделать его более читабельным.

0
Katulus 4 Сен 2017 в 15:30

Если я правильно понял, вы хотите вернуть LoanOut, но вы получаете ошибку, которую пытаетесь преобразовать из LoanOut в удвоенную. Ваш метод, однако, в частности, говорит, что вы будете возвращать двойной:

public double LoanCalc()

Я бы попробовал заменить double на LoanOut следующим образом:

public LoanOut LoanCalc()

Это помогает?

0
That'sIs JustCrazy 4 Сен 2017 в 15:32

Ваш метод объявлен как возвращающий двойной, и у вас есть заявление

return new LoanOut(InterestPaymentAnnual, RePymntAnnual, LoanOutstanding); 

Измените тип возврата вашего метода на LoanOut:

public LoanOut LoanCalc() 
3
Kell 4 Сен 2017 в 15:29