Parse v.TrreadParse

时间:2009-01-22 00:16:39

标签: c# parsing integer tryparse

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

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

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

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

8 个答案:

答案 0 :(得分:140)

Parse如果无法解析该值则会抛出异常,而TryParse会返回bool,表明它是否成功。

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

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

答案 1 :(得分:21)

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:3)

TryParse and the Exception Tax

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

答案 4 :(得分:0)

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

答案 5 :(得分: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

这是痛苦的慢和不可取的,然而,代码不会停止,除非Debug的异常被解决为停止它。

答案 6 :(得分:0)

我知道它是一个非常古老的帖子,但想到分享关于Parse和TryParse的更多细节。

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

旧代码:

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。

答案 7 :(得分:-2)

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