116

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

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

// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);

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

4

8 回答 8

163

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

TryParse不只是try/catch内部 - 它的全部意义在于它没有例外地实现,因此它很快。事实上,它最有可能实现的方式是,该Parse方法将在内部调用TryParse,然后在返回时抛出异常false

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

于 2009-01-22T00:20:11.933 回答
31

如果字符串不能转换为整数,则

  • int.Parse()会抛出异常
  • int.TryParse()将返回 false(但不会抛出异常)
于 2009-01-22T00:18:31.763 回答
4

TryParse 方法允许您测试某些内容是否可解析。如果您在第一个实例中使用无效的 int 尝试 Parse,则在 TryParse 中会出现异常,它会返回一个布尔值,让您知道解析是否成功。

作为脚注,将 null 传递给大多数 TryParse 方法将引发异常。

于 2009-01-22T00:18:52.107 回答
4

TryParse 和例外税

如果从字符串到指定数据类型的转换失败,Parse 会引发异常,而 TryParse 会显式避免引发异常。

于 2009-01-22T00:23:34.500 回答
0

TryParse 不返回值,它返回一个状态码来指示解析是否成功(并且不抛出异常)。

于 2009-01-22T00:19:16.740 回答
0

作为记录,我正在测试两个代码:这只是尝试从字符串转换为数字,如果失败则将数字分配为零。

        if (!Int32.TryParse(txt,out tmpint)) {
            tmpint = 0;
        }

和:

        try {
            tmpint = Convert.ToInt32(txt);
        } catch (Exception) {
            tmpint = 0;
        }

对于 c#,最好的选择是使用 tryparse,因为 try&Catch 替代抛出异常

A first chance exception of type 'System.FormatException' occurred in mscorlib.dll

这是痛苦的缓慢和不可取的,但是,除非调试的异常被解决,否则代码不会停止。

于 2012-02-18T16:43:57.953 回答
0

我知道这是一篇非常古老的帖子,但我想分享更多关于 Parse 与 TryParse 的细节。

我有一个需要将 DateTime 转换为 String 的场景,如果 datevalue 为 null 或 string.empty,我们将面临异常。为了克服这个问题,我们将 Parse 替换为 TryParse 并将获得默认日期。

旧代码:

dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");

新代码:

DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);

必须声明另一个变量并用作 TryParse 的 Out。

于 2017-05-31T09:13:25.343 回答
-1

double.Parse("-"); 引发异常,而 double.TryParse("-", out parsed); 解析为 0 所以我猜 TryParse 做了更复杂的转换。

于 2011-07-22T00:58:13.200 回答