3

我目前正在与一个旧的 api 作斗争,我面临以下问题:当我尝试将一个对象强制转换为一个对象数组时,当值是可为空的日期时,我得到运行时异常。

Module Module1
    Sub Main()
        Console.WriteLine(Misc.dateCast(New Nullable(Of DateTime)()))
        Console.WriteLine(Misc.tabledateCast(New Nullable(Of DateTime)() {New DateTime()}))
    End Sub
End Module

Module Misc
    Function dateCast(ByVal val As Nullable(Of DateTime)) As Object
        Return CType(val, Object)
    End Function

    Function tabledateCast(ByVal val As Object) As Object()
        Return CType(val, IEnumerable(Of Object)).Cast(Of Object).ToArray
    End Function
End Module

第一个演员正在工作,但不是第二个。如何成功转换为对象数组?

我不能使用CType(val, IEnumerable(Of Nullable(Of DateTime))),因为该函数可能会获取其他类型的数组。

4

1 回答 1

2

看起来你有两个选择:

1)如果数组本身是类型安全的,您可以对该方法进行泛型化,以便在转换为对象之前知道要转换的内容 - 这不是最好的代码,尤其是在 VB.NET 中:

Module Module1
    Sub Main()
        Console.WriteLine(Misc.tabledateCast(Of Nullable(Of DateTime))(New Nullable(Of DateTime)() {New DateTime()}))
    End Sub
End Module

Module Misc
    Function tabledateCast(Of T)(ByVal val As Object) As Object()
        Return CType(val, IEnumerable(Of T)).Cast(Of Object).ToArray
    End Function
End Module

2)老金的链接,你首先做一个非泛型IEnumerable演员:

Module Module1
    Sub Main()
        Console.WriteLine(Misc.tabledateCast(New Nullable(Of DateTime)() {New DateTime()}))
    End Sub
End Module

Module Misc
    Function tabledateCast(ByVal val As Object) As Object()
        Return CType(val, IEnumerable).Cast(Of Object).ToArray
    End Function
End Module
于 2012-09-14T16:07:51.013 回答