BC42322 VB.NET 将 'String' 转换为 'IFormatProvider' 时可能会出现运行时错误

BC42322 VB.NET Runtime errors might occur when converting 'String' to 'IFormatProvider'

我正在尝试将旧的 VB6(Visual Basic 6.0) 项目迁移到 VB.net 框架 4.6x。 但是我必须先迁移到 .net framework 2.0。

我曾经使用 ToString 将 TextBox 中的数字转换为格式化数字,如下所示。 在 Visual Studio 2017 .net framework 2.0 中,我有 BC42322 警告。 有办法解决吗?

txtDividend.Text = txtDividend.Text.ToString("###,###,##0")

我也有

On Error GoTo Error_Handle

在处理该文本框中字符的函数的开头

Text属性已经是一个字符串,ToString()字符串的方法没有你想要的重载。

因为这个文本字段似乎可以同时包含一个值的格式化和未格式化版本,您可能想要做的是首先剥离任何格式,转换为数字类型,如 IntegerDecimal,然后从那里使用 ToString() 方法:

Public Function FormatDividend(dividend As String) As String
    Dim extraCharacters As New Regex("[^\d,.-]")
    dividend = extraCharacters.Replace(dividend, "")
    Return FormatDividend(CDec(dividend))
End Function
Public Function FormatDividend(dividend As Decimal) As String
    Return Dividend.ToString("###,###,##0")
End Function

您可以这样调用这些函数:

txtDividend.Text = FormatDividend(txtDividend.Text)

当然,您可以根据需要调整该表达式,或者更改重载和转换以使用 Integer 而不是 Decimal。

因为我有多个 TextBox 需要使用格式,所以我升级了 Joel Coehoorn 的答案以在我的项目中使用格式 TextBox。

首先,我创建了CommonFunction.vb模块文件

Imports System.Text.RegularExpressions
Module CommonFunction
    Public Function FormatNumberInText(text As String, format As String) As String
        Dim extraCharacters As New Regex("[^\d,.-]")
        text = extraCharacters.Replace(text, "")
        Return FormatNumberInText(CDec(text), format)
    End Function
    Public Function FormatNumberInText(text As Decimal, format As String) As String
        Return text.ToString(format)
    End Function
End Module

在我的 TextBox vb 文件中,我按如下方式使用它。

txtDividend.Text = FormatNumberInText(txtDividend.Text, "###,###,##0")
txtDividendRatio.Text = FormatNumberInText(txtDividendRatio.Text, "###,###,##0.0#")

谢谢Joel Coehoorn

由于您正尝试从 "1000".ToString("###,##0") 生成 1,000 的环境迁移,因此您会希望它在新的 (.net) 中工作。该解决方案是创建一个实质上提供重载的扩展方法。

<Extension>
Function ToString(input as String, format as String) as String
    Static numericOnly As Regex = New Regex("[^\d.-]")
    Dim asDec as Decimal
    Decimal.TryParse(numericOnly.Replace(input, ""), asDec)
    Return asDec.ToString(format)
End Function