Parse v.TrreadParse

Kre*_*dns 106 c# parsing integer tryparse

Parse()和TryParse()有什么区别?

int number = int.Parse(textBoxNumber.Text);

// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
Run Code Online (Sandbox Code Playgroud)

是否有某种形式的错误检查,如Try-Catch Block?

Gre*_*ech 148

Parse如果它无法解析该值,则抛出异常,而TryParse返回bool指示是否成功的异常.

TryParse不只是try/ catch内部 - 它的全部意义在于它是在没有异常的情况下实现的,因此速度很快.实际上,它最有可能实现的方式是在内部Parse方法将调用TryParse,然后在返回时抛出异常false.

简而言之,Parse如果您确定该值有效,请使用; 否则使用TryParse.

  • 虽然考虑到这一点,Parse抛出了许多不同的异常,所以如果它只是一个来自TryParse的bool那么它就不会知道扔哪一个. (6认同)
  • "如果您确定该值有效,请使用Parse".我补充说,"但你承认你可能错了".如果您100%确定它可以解析,那么您可以正确使用TryParse,这可能更快. (5认同)
  • @Joel - 我以为他们会移动实现,但我只是看看反射器,他们是单独的实现,*完全*相同的代码,而不是一个'throw ...'和一个'返回false'.我想知道为什么他们没有巩固?! (4认同)
  • “在内部,Parse 方法将调用 TryParse”,只不过 Parse 比 TryParse 早了几个版本。当然,他们可以将核心实现移至 TryParse... (2认同)
  • 而对于"不同的例外",@ GregBeech意味着消息,而不是类. (2认同)

M4N*_*M4N 23

如果字符串无法转换为整数,那么

  • int.Parse() 会抛出异常
  • int.TryParse() 将返回false(但不会抛出异常)

  • @AlexandruAntochi 你不应该以评论的形式提出问题。这将使其他人几乎不可能从有用的答案中受益。然而,为了让它值得你花时间,你的问题的答案是否定的, int.TryParse 根本不会抛出。如果该方法无法解析,它只会通过返回值 false 来反映这一点。这使得使用 if(int.TryParse... 只在解析成功时才执行某些操作变得很方便。 (2认同)