VB.NET 通用函数

标签 vb.net generics function

我想做的是,根据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

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

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

关于VB.NET 通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1202549/

相关文章:

java - 使用泛型java进行android数据绑定(bind)

javascript - 在 JavaScript 中使用匿名函数有什么缺点吗?例如。内存使用?

function - OCaml 中的递归函数引用?

c# - 代码转换

c# - 通过实现 IWsdlExporteExtension 来定义具有选择性端点的 WCF 服务 WSDL

Java 泛型运算符

swift - 返回一个符合泛型约束的对象

c++ - boost::函数错误

mysql - 如何在mysql查询中从数据库中获取值?

vb.net - 使用比例绘制和缩放矩形