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