我收到这个奇怪的错误,并且无法编译。我的代码如下:
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);
}
如果有人向我解释如何解决我的问题,我将非常感谢。编译时会产生以下错误。
提前谢谢!
答案 0 :(得分:0)
如错误所述,类型不包含Round和Parse的定义。您需要改用Decimal.Parse和Decimal.Round
您需要使用
viewBag.MonthlyPaymentWithTax = Decimal.Round(num2 +
Decimal.Parse(((dynamic)base.ViewBag).TaxToAdd.ToString()) /
model.CreditPeriod, 2);
您可以在此处详细了解这两种方法
答案 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);