我有两个模型接口ILoanModel和IAmortizationModel。
public interface ILoanModel
{
string ID { get; set; }
IEmployeeModel Borrower { get; set; }
// ******* other propeties *********
ICollection<Model.IAmortizationModel> AmortizationTable { get; set; }
}
public interface IAmortizationModel
{
string ID { get; set; }
ILoanModel Loan { get; set; }
// ******* other propeties *********
}我创建了另一个处理计算和其他函数的接口。
public interface IAmortization
{
// Compute and generate amortization table
Model.ILoanModel Generate(Model.ILoanModel loan);
// **** Other function *****
}目前,我有三种类型的贷款,它们都有相同的计算方法和生成摊销表。
public abstract class Amortization : Controller.Computation.Interface.IAmortization
{
public virtual Model.ILoanModel Generate(Model.ILoanModel loan)
{
// **** other code *******
//Create the amortization table
decimal last_Amortization_RunningBalance = loan.Amount;
loan.AmortizationTable = new List<Model.IAmortizationModel>();
for (int x = 1; loan.NumberOfPayment >= x; x++)
{
// having problem here because Model.IAmortizationModel is a interface
var newAmortizationRow = new Model.IAmortizationModel
{
ID = Guid.NewGuid().ToString(),
AmortizationAmount = loan.AmortizationPaymentAmount,
AmortizationInterest = loan.AmortizationPaymentAmount* loan.Nominal,
AmortizationPrepayment =
loan.AmortizationPaymentAmount
- (loan.AmortizationPaymentAmount * loan.Nominal),
AmortizationOutstandingBalance =
last_Amortization_RunningBalance
- (loan.AmortizationPaymentAmount
- (loan.AmortizationPaymentAmount * loan.Nominal)),
Sequence = x
};
last_Amortization_RunningBalance -=
newAmortizationRow.AmortizationOutstandingBalance;
loan.AmortizationTable.Add(newAmortizationRow);
}
}
}我现在的问题是生成新的IAmortizationModel,并将其添加到loan.AmortizationTable中。如何获得loan.AmortizationTable的类型并创建?
发布于 2021-05-19 03:41:02
一种选择是将其变为泛型,并使用new()添加一个泛型约束。
public virtual Model.ILoanModel Generate<T>(Model.ILoanModel loan)
where T:IAmortizationModel, new()然后调用new T()
另一种选择是传递一个生成器函数:
public virtual Model.ILoanModel Generate(Model.ILoanModel loan,
Func<IAmortizationModel> generator)打电话给generator()
https://stackoverflow.com/questions/67596339
复制相似问题