【发布时间】:2011-06-29 11:28:55
【问题描述】:
我确信在某个地方有一个答案,但我在搜索中显然使用了错误的术语,所以我提前道歉,因为这不可避免地是重复的。
取函数 CType。显然,我可以将给定对象转换(或至少尝试)给定引用类型。如果尝试转换为结构,该函数将不起作用,即
CType(myObject, Integer)
...会产生编译器错误。我敢肯定,在使用泛型时最常出现这种情况:
Public Function GetResults(Of T)() As T
Dim instance As T
Return CType(GetData(instance), T)
End Function
Public Function GetData(ByVal param As myClass) As myClass
'do stuff
Return param
End Function
Public Function GetData(byval param As Integer) As Integer
'do stuff
Return param
End Function
Public Function GetResults(ByVal param As Object) As Object
Throw New NotImplementedException
End Function
可能不是最好的例子,但希望能说明我的意思。以下将起作用:
Dim result = GetResult(Of myClass)
以下将在 CType 上失败
Dim result = GetResult(Of Integer)
如果可以应用逻辑,我不太喜欢使用异常/Try-Catch,所以虽然我可以 Try-Catch CType,但我宁愿找到一种方法通过不同的代码对其进行路由。我知道我可以使用泛型
Public Function GetResults(Of T As Structure) As T
相反的是什么?我只想要引用类型,这样 CType 就不会失败......我不能用普通的 T 重载 T As Structure 因为它认为它们是相同的签名,所以肯定有我在某处缺少的关键字吗? ^^
很长的问题,可能只需要一个单词的答案(对不起)...提前谢谢!
【问题讨论】:
标签: vb.net visual-studio-2010 generics .net-4.0 casting