VB.NET 通用函数

2024-01-11

我想做的是,根据T的类型做不同的操作。下面是我的问题的一个简单示例。

Public Shared Function Example(Of T)() As T
    Dim retval As T
    If TypeOf retval Is String Then
        Dim myString As String = "Hello"
        retval = myString
    ElseIf TypeOf retval Is Integer Then
        Dim myInt As Integer = 101
        retval = myInt
    End If
    Return retval
End Function

我收到错误“‘String’类型的值无法转换为‘T’”与整数部分相同。如果我在将它们分配给 retval 之前将其投射到一个对象,它会起作用,但我认为这会违背我的目的并且效率较低。有任何想法吗?谢谢!


可能有点晚了,但试试这个:

    Public Shared Function CAnyType(Of T)(ByRef UTO As Object) As T
        Return CType(UTO, T)
    End Function


    Public Shared Function ExecuteSQLstmtScalar(Of T)(ByVal strSQL As String) As T
        Dim T_ReturnValue As T

        ' Here we have the result of a DB query ' 
        Dim obj As Object = "Value from DB query cmd.ExecuteScalar"
        Dim strReturnValue As Object = obj.ToString();



        Try
            Dim tReturnType As Type = GetType(T)

            If tReturnType Is GetType(String) Then
                Return CAnyType(Of T)(strReturnValue)
            ElseIf tReturnType Is GetType(Boolean) Then
                Dim bReturnValue As Boolean = Boolean.Parse(strReturnValue)
                Return CAnyType(Of T)(bReturnValue)
            ElseIf tReturnType Is GetType(Integer) Then
                Dim iReturnValue As Integer = Integer.Parse(strReturnValue)
                Return CAnyType(Of T)(iReturnValue)
            ElseIf tReturnType Is GetType(Long) Then
                Dim lngReturnValue As Long = Long.Parse(strReturnValue)
                Return CAnyType(Of T)(lngReturnValue)
            Else
                MsgBox("ExecuteSQLstmtScalar(Of T): This type is not yet defined.")
            End If

        Catch ex As Exception

        End Try

        Return Nothing
    End Function

(秘密是将通用结果转换为对象,然后从类型 Object 转换为模板类型 T)。

PS:
您有责任确保您的代码能够正确使用可空类型和不可空类型以及 System.DbNull.Value。例如,当字符串为 NULL 并且返回值类型为布尔值(不可为空)时。顺便说一句,还请注意 VB Nothing 不等于 NULL,它等于 C# 的default(T)(例如 Guid 的 System.Guid.Empty)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VB.NET 通用函数 的相关文章

随机推荐