0

while 循环中的 ra.Value 有时是 DateTime 类型,不幸的是 .ToString() 方法不足以将其转换为字符串。我应该对我的代码进行更改,以识别 ra.Value 何时为 DateTime 类型并将其转换为字符串。现在我有一个例外,从“日期时间”类型到“字符串”类型的转换无效。

With ro.Attributes.GetEnumerator
    While .MoveNext
        Dim ra As ReportAttribute = CType(.Current, ReportAttribute)
        Dim lstrColumnReportObj As Integer = ra.Column
        Dim lstrValueReportObj As String = ra.Value.ToString()
        lstrParTable(lstrColumnReportObj) = lstrParTable(lstrColumnReportObj) + lstrValueReportObj
    End While
End With

谢谢你。

4

1 回答 1

0

您可能正在寻找的简单解决方案是:

With ro.Attributes.GetEnumerator
    While .MoveNext
        Dim ra As ReportAttribute = CType(.Current, ReportAttribute)
        Dim lstrColumnReportObj As Integer = ra.Column
        Dim lstrValueReportObj As String = Nothing
        If TypeOf ra.Value Is Date Then
            lstrValueReportObj = ra.Value.ToString("d MMM yyyy")
        Else
            lstrValueReportObj = ra.Value.ToString()
        End If
        lstrParTable(lstrColumnReportObj) = lstrParTable(lstrColumnReportObj) + lstrValueReportObj
    End While
End With

但是,这确实有点不好的做法,您可能需要重新考虑您的整体设计。通常,当您必须开始为某些类型添加特殊逻辑时,例如,这通常表明您可以以更好的方式进行操作。例如,当您开始需要其他类型的自定义格式时会发生什么。一旦您有多个异常,它将变得笨拙并且代码将变得脆弱(容易出现错误)。

另外,我觉得有必要提到 .NET 中不鼓励使用匈牙利表示法。如果您的雇主要求您使用它,那很好,否则,我建议您通读Microsoft 官方命名指南

于 2013-08-26T14:50:07.873 回答