Parse 诉 TryParse

Parse ()和 TryParse ()的区别是什么?

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


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

Is there some form of error-checking like a Try-Catch Block?

124536 次浏览

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

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

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

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

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

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

TryParse不仅仅在内部实现 try/catch-它的全部意义在于它的实现没有例外,所以它是快速的。实际上,它最有可能的实现方式是在内部 Parse方法将调用 TryParse,然后在返回 false时抛出异常。

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

TryParse and the Exception Tax

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

解析(“-”) ; 引发异常,而 TryParse (“-”,out parsed) ; 解析为0 所以我想 TryParse 可以进行更复杂的转换。

For the record, I am testing two codes: That simply try to convert from a string to a number and if it fail then assign number to zero.

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

and:

        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

这是痛苦的缓慢和不受欢迎的,但是,代码不会停止,除非调试的异常解决了与它停止。

我知道这是一篇很老的文章,但是我想分享一些关于 Parse vs TryParse 的更多细节。

我有一个场景,需要将 DateTime 转换为 String,如果 datevalue null 或 String.void,我们将面临异常。为了克服这个问题,我们将 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);

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