类型不包含“ Round”和“ Parse”的定义

时间:2019-02-20 03:39:57

标签: c# asp.net-mvc model-view-controller compiler-errors

我收到这个奇怪的错误,并且无法编译。我的代码如下:

 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 :(得分:0)

如错误所述,类型不包含Round和Parse的定义。您需要改用Decimal.Parse和Decimal.Round

您需要使用

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

您可以在此处详细了解这两种方法

Decimal.Round

Decimal.Parse

答案 1 :(得分:0)

我不知道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);