Parse() 和 TryParse() 有什么区别?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
是否有某种形式的错误检查,例如 Try-Catch 块?
Parse
如果它无法解析该值,则抛出异常,而TryParse
返回一个bool
指示它是否成功。
TryParse
不只是try
/catch
内部 - 它的全部意义在于它没有例外地实现,因此它很快。事实上,它最有可能实现的方式是,该Parse
方法将在内部调用TryParse
,然后在返回时抛出异常false
。
简而言之,Parse
如果您确定该值有效,请使用;否则使用TryParse
.
如果字符串不能转换为整数,则
int.Parse()
会抛出异常int.TryParse()
将返回 false(但不会抛出异常)TryParse 方法允许您测试某些内容是否可解析。如果您在第一个实例中使用无效的 int 尝试 Parse,则在 TryParse 中会出现异常,它会返回一个布尔值,让您知道解析是否成功。
作为脚注,将 null 传递给大多数 TryParse 方法将引发异常。
如果从字符串到指定数据类型的转换失败,Parse 会引发异常,而 TryParse 会显式避免引发异常。
TryParse 不返回值,它返回一个状态码来指示解析是否成功(并且不抛出异常)。
作为记录,我正在测试两个代码:这只是尝试从字符串转换为数字,如果失败则将数字分配为零。
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
这是痛苦的缓慢和不可取的,但是,除非调试的异常被解决,否则代码不会停止。
我知道这是一篇非常古老的帖子,但我想分享更多关于 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。
double.Parse("-"); 引发异常,而 double.TryParse("-", out parsed); 解析为 0 所以我猜 TryParse 做了更复杂的转换。