Double.Parse vs Double.TryParse



我在使用TryParse时遇到了一些我不理解的东西。我正在为我的WPF应用程序构建一个FormatConverter。一个非常标准的FormatConverter。在ConvertBack函数中,我有这个代码

Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
Dim val As Double
' Here the value is "1495,00 $" and culture is "en-US"
val = Double.Parse(value.ToString, Globalization.NumberStyles.Currency)
If Double.TryParse(value.ToString, val) Then
Return val
End If
Return 0
End Function

但奇怪的是,Double.TryParse给我一个假答案,Double.Parse,正确转换值。

为什么Double.TryParse无法转换值??

Double.TryParse([string to convert], out result);

接受两种排列的TryParse函数,第一种是要转换的字符串,第二种是具有结果值的输出参数,但方法会根据转换自行返回true或false,如果转换成功,则返回true,否则将返回false

Double.Parse([string to convert]);  

Parse函数不会根据转换返回true或false,如果成功,它会尝试转换,如果不成功,它将返回转换后的值,它将抛出异常,所以如果你想使用Parse函数,你必须将它放在trycatch子句中,以避免exceptions

更新您在字符串格式中面临的问题,它本身就是

这里有一个与您提供的代码最相似的方法

public static decimal Parse(string input)
{
return decimal.Parse(Regex.Replace(input, @"[^d.]", ""));
}

这里有一个选项,它将支持负数,如果找到第二个句点值,它将停止,从而减少返回的无效十进制值字符串的数量。它还有一些OP中没有的其他修改,以处理当前代码没有的其他情况。

public static decimal Parse(string input)
{
return decimal.Parse(Regex.Match(input, @"-?d{1,3}(,d{3})*(.d+)?").Value);
}

最新更新