2015-01-03 2 views
-2

У меня есть интересная проблема.Сочетание переменных и динамических операторов

У меня есть функция, которая возвращает var элементов;

var Items = new { sumList = SumList, ratesList = List, sum = List.Sum() }; 
     return Items; 

Из функции, которая является динамичным:

public override dynamic GetRates() 

и я вернуть его к функции я еще где и попытаться применить его к моему коду:

 dynamic res = cl.mainC.GetRates(); 
    List<double> MashkantaSumList = res.sumList; 

Теперь, когда я попробуйте применить его, он говорит, что объект не существует. Но если я посмотрю в отладчике, элементы будут счастливы там как общий список, а что нет.

Как это разрешить?

EDIT:

по желанию я выложу полный код:

//virtual 
    public virtual dynamic TotalMashkanta(int i, double sum, double ribit, string[] discount) 
    { 
     return 0; 
    } 

//override 
public override dynamic TotalMashkanta(int i, double sum, double ribit, string[] discount) 
    { 
     double SumTemp = sum; 
     double monthlyRibit = ribit/12; 
     Double permPayPerMont = Financial.Pmt(monthlyRibit, i, sum, 0, DueDate.EndOfPeriod); 
     List<double> MashkantaList = new List<double>(); 
     List<double> MashkantaSumList = new List<double>(); 
     for (int j = 1; j <= i; j++) 
     { 
      MashkantaList.Add(Mashkanta(j, sum, ribit, permPayPerMont) * (1 - CalcDiscount((j/12) + 1, discount))); 
      SumTemp = getSum(j, sum, ribit, permPayPerMont * -1); ; 
      MashkantaSumList.Add(SumTemp); 
     } 
     var K_Mashkanta = new { sumList = MashkantaSumList, ratesList = MashkantaList, sum = MashkantaList.Sum() }; 
     return K_Mashkanta; 
    } 


    //Function that calls the results 


    public void GetSilukinTable(string Path, string ClientID, DAL.Client client, string partner_checked, string insurance_Amount, string Premiya_Structure_Mashkanta, string Premiya_Life_Mashkanta, string Discount_Life_Mashkanta, string Loan_Period,string Loan_EndDate, string Bank, string Loan_Interest, string Loan_Amount, string Discount_Loan, string AgentNotes, string ManID) 
    { 

     BL.CalculateLogic.Companies t = BL.CalculateLogic.Companies.כלל; 
     if(ManID == "211") t = BL.CalculateLogic.Companies.הפניקס; 
     if(ManID == "207") t = BL.CalculateLogic.Companies.הראל; 
     if(ManID == "206") t = BL.CalculateLogic.Companies.מנורה; 
     if(ManID == "208") t = BL.CalculateLogic.Companies.הכשרה; 
     BL.CalculateLogic cl = new BL.CalculateLogic(client, t); 
     DateTime LoanEnd = DateTime.Now; 
     int months = 0; 
     if (DateTime.TryParse(Loan_EndDate, out LoanEnd)) 
      months = BL.Calculating_Companies.Company.GetMonthsBetween(DateTime.Now, LoanEnd); 
     else 
      months = Int32.Parse(Loan_Period) * 12; 
     string[] Discount = Discount_Loan.Split('-'); 

     dynamic res = cl.mainC.TotalMashkanta(months, Double.Parse(Loan_Amount), Double.Parse(Loan_Interest.Trim('%')), Discount); 
     var MashkantaSumList = res.sumList; 
     List<double> MashkantaList = res.ratesList; 
     List<double> MashkantaSumListPartner = new List<double>(); 
     List<double> MashkantaListPartner = new List<double>(); 
     List<double> MashkantaListSum = res.ratesList; 

    } 
+0

Ваше кодирование стиль действительно не соответствует соглашениям C#. –

+0

Так убивай меня, что я могу сказать – misha130

+0

На самом деле была причина, по которой я не хотел публиковать полный код, потому что его так чертовски путают – misha130

ответ

2

Компилятор рад этому, потому что dynamic составляется и проверяется во время выполнения. Какова бы ни была проблема, типы не совпадают. Он оценивает это во время выполнения, поэтому вы не увидите проблем во время компиляции. (Совет: используйте dynamic только тогда, когда вы действительно должны Else вы будете иметь такого рода проблемы, все время!)


Я попробовал ваш код, используя это и она отлично работает:

static dynamic GetRates() 
{ 
    List<double> SumList = new List<double>(); 
    List<double> List = new List<double>(); 
    var Items = new { sumList = SumList, ratesList = List, sum = List.Sum() }; 
    return Items; 
} 

static void Main(string[] args) 
{ 
    dynamic res = GetRates(); 
    List<double> MashkantaSumList = res.sumList; 
} 
+0

Мы не знаем, что такое 'SumList'. Может быть, это список некоторых сумм. –

+0

Это была опечатка, я редактирую. Прошу прощения за недоразумение. – misha130

+0

@pwas: Uhhh, код был изменен, когда я набирал ответ ... –

Смежные вопросы