Тип не содержит определения 'Round' и 'Parse' - PullRequest
0 голосов
/ 20 февраля 2019

Я получаю эту странную ошибку, и она не компилируется.Мой код выглядит так:

 if (model.CreditType == "Extra")
    {
    decimal num1 = decimal.Parse(amountReturn.ToString()) / model.CreditPeriod;
   ((dynamic)base.ViewBag).MonthlyPayment = Math.Round(num1, 2, 
   MidpointRounding.AwayFromZero);
   dynamic viewBag = base.ViewBag;
   Type type = typeof(Math);
   decimal num2 = num1;
   Type type1 = typeof(decimal);
   viewBag.MonthlyPaymentWithTax = type.Round(num2 + 
   type1.Parse(((dynamic)base.ViewBag).TaxToAdd.ToString()) / 
   model.CreditPeriod, 2, 1);
   }

Я буду очень благодарен, если кто-нибудь объяснит мне, как решить мою проблему.При компиляции выдает следующие ошибки:

Заранее спасибо!

compilation errors

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Я не знаю asp.net, но я думаю, что мог бы объяснить вашу ошибку.

Когда вы используете typeof(myobj), это выражение возвращает экземпляр System.Type, а не ссылку на сам тип ссылкив коде, например Int.Parse().

Экземпляр System.Type является представлением информации о типе времени выполнения.Это своего рода «мета» объект, не то же самое, что ссылка на тип, который вам нужен в коде.

Если вы хотите вызвать определенный метод через System.Type объект, вы должны сначала найти его.Этот метод вызова называется «Отражение».Я рекомендую вам не делать этого, потому что это нелегко, нуждается в шаблоне (?) И не требуется в большинстве случаев, когда вы знаете свой тип. doc

Я просто рекомендую сначала привести тип цели и просто вызвать статический метод типа (как это сделал другой ответ).или использовать TryParse?

(код не проверен на компиляцию)

dynamic a = "123";
string a_casted = 123 as string;
if (a_casted == null) { return; }

int a_parsed = Int.Parse(a_casted);
0 голосов
/ 20 февраля 2019

Как упоминалось в ошибке, тип не содержит определения как для раунда, так и для анализа.Вам нужно использовать Decimal.Parse и Decimal.Round вместо

Вам необходимо использовать

   viewBag.MonthlyPaymentWithTax = Decimal.Round(num2 + 
   Decimal.Parse(((dynamic)base.ViewBag).TaxToAdd.ToString()) / 
   model.CreditPeriod, 2);

Подробнее об обоих методах можно прочитать здесь

Десятичное число.Вокруг

Десятичный. Парный

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...