与结构相反?

时间:2011-06-29 11:28:55

标签: vb.net visual-studio-2010 generics .net-4.0 casting

我确定在某个地方有一个答案,但我在搜索中显然使用了错误的术语,所以我提前道歉,因为这不可避免地会重复。

采用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的忠实粉丝,所以尽管我可以尝试捕获CType,但我宁愿找到一种方法来通过不同的代码来路由它。我知道Generics我可以使用

Public Function GetResults(Of T As Structure) As T

相反的是什么?我只想要引用类型,以便CType不会失败...我不能使用普通的 T 重载 T As Structure ,因为它认为它们是相同的签名,所以肯定有一个关键字,我在某处丢失? ^^

很长的问题,可能只需要一个单词答案(对不起)......提前致谢!

1 个答案:

答案 0 :(得分:1)

Public Function GetResults(Of T As Class) As T