【问题标题】:Opposite to a Structure?与结构相反?
【发布时间】: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


    【解决方案1】:
    Public Function GetResults(Of T As Class) As T
    

    【讨论】:

    • 谢谢@Max,我知道这很简单。令人讨厌的是,我假设在我的示例中,将调用 GetResults 的正确重载,但实际上它们都被传递给对象版本(旨在作为未实现类型的全部捕获)。无论如何,最终知道我追求的是哪个红润关键字仍然很有用,再次感谢
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多