vb.net - 将对象转换为具有可为空日期的 Object()

标签 vb.net casting

我目前正在与旧的 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

第一个 Actor 可以工作,但第二个不行。如何成功转换为对象数组?

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

最佳答案

看起来您有两个选择:

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)Laoujin 的链接,您首先在其中执行非泛型 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

关于vb.net - 将对象转换为具有可为空日期的 Object(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427329/

相关文章:

asp.net - 为什么使用 HTML5 uploader 时 Request.Files.Count 有时为 0?

.net - 在winforms应用程序中动态设置Picturebox的图像?

c++ - 将一种类型的地址取消引用为另一种类型的地址

c - 结构指针强制转换

vb.net - 如何使用所有打开表单的列表填充列表框

c# - asp.net 中的文件 uploader 不显示文件

c# - 为什么我不能只写一个没有 catch 或 finally 的 try?

C 汇编程序函数转换

java - 为什么当我强制转换时我无法访问子类属性?

mysql - MySQL 中的精确小数除法