我遇到了一些我不理解的东西,使用了TryParse。 我正在为我的WPF应用程序构建一个FormatConverter。一个非常标准的FormatConverter。 在ConverBack函数中我有这段代码
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,无法转换值?
答案 0 :(得分:0)
Double.TryParse([string to convert], out result);
TryParse
函数接受两个排列,第一个是要转换的字符串,第二个是带有结果值的输出参数,但是如果转换成功完成转换,则自动返回true或false的方法然后返回true,否则它将返回false
Double.Parse([string to convert]);
Parse
函数根据转换会返回true或false,如果成功则会返回转换后的值,如果不是它会抛出异常,如果你想使用Parse
函数您必须将其放在try
和catch
子句中以避免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);
}