Answers:
Parse
如果无法解析该值,则引发异常,而TryParse
返回bool
指示其是否成功的异常。
TryParse
不只是try
/ catch
内部-它的全部意义在于,它是没有例外,使其快速实现。实际上,最有可能实现该Parse
方法的方法是在内部调用该方法TryParse
,如果该方法返回则抛出异常false
。
简而言之,Parse
如果您确定该值将有效,请使用;否则,请使用。否则使用TryParse
。
如果字符串不能转换为整数,则
int.Parse()
会抛出异常int.TryParse()
将返回false(但不会引发异常)TryParse方法允许您测试某些东西是否可解析。如果您像第一个实例中那样使用无效的int尝试解析,则在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
令人痛苦的缓慢和令人不快的是,但是,除非Debug的异常被解决以停止它,否则代码不会停止。
我知道这是一个非常古老的文章,但是想分享更多有关Parse vs 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);
必须声明另一个变量,并用作TryParse的Out。
startDate
,并endDate
为DateTime.TryParse
将始终以覆盖它们DateTime.MinValue
。如果错误的日期表示形式应转换为其他值,请检查的返回值;DateTime.TryParse
如果返回的值为false,则应明确设置该值。
DateTime?
(DateTime可为空)
double.Parse(“-”); 引发异常,而double.TryParse(“-”,已解析);解析为0,所以我想TryParse会执行更复杂的转换。
TryParse
返回true
还是false
?这样您将知道它是否“有效”。