Double.Parse与Double.TryParse

时间:2014-02-18 14:23:45

标签: vb.net converter

我遇到了一些我不理解的东西,使用了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,无法转换值?

1 个答案:

答案 0 :(得分:0)

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);
}