【问题标题】:Type does not contain definition of 'Round' and 'Parse'类型不包含“Round”和“Parse”的定义
【发布时间】:2019-02-20 03:39:57
【问题描述】:

我收到这个奇怪的错误,但它无法编译。我的代码如下所示:

 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);
   }

如果有人解释我如何解决我的问题,我将非常感激。编译时会产生以下错误。

提前谢谢你!

【问题讨论】:

  • 如果Math.Round()decimal.Parse() 够用,为什么还要使用Type?当然System.Type 没有Round()Parse() 方法,它们存在于各自的类/结构中。
  • 你在代码中做了一些非常奇怪的事情,OP。你到底想完成什么?你不应该为了做数学而做所有的转换或使用dynamic

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如错误中所述,Type 不包含 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

    【讨论】:

    • @InvanteCaprito 您的 Round 方法调用中的第三个参数是什么。你打算它是什么? Decimal.Round 的参数是 a) 要四舍五入的值,b) 小数位数。第三个参数其实是docs.microsoft.com/en-us/dotnet/api/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    相关资源
    最近更新 更多