Значение «String» не может быть преобразовано в тип «T». Общая функция для получения строк запроса?

У меня есть эта функция:

Public Shared Function GetQueryStringValue(Of T As Structure)(ByVal queryStringVariable As String) As T
        Dim queryStringObject As Nullable(Of T) = Nothing
        If queryStringVariable <> Nothing Then
            If HttpContext.Current.Request.QueryString(queryStringVariable) IsNot Nothing Then
                queryStringObject = DirectCast(HttpContext.Current.Request.QueryString(queryStringVariable), T)
            End If
        End If

        Return queryStringObject
End Function

Которая я надеялся назвать вот так:

Dim userId As Integer = SessionUtil.GetSessionValue(Of Integer)("uid")

Я пытался сделать ее универсальной, так как в конечном итоге значение строки запроса может быть как минимум целым числом или строкой, но возможно также дубль и другие. Но я получаю сообщение об ошибке:

Значение «String» не может быть преобразовано в тип «T»

Я сделал то же самое с переменными сеанса, и это сработало. Кто-нибудь знает, как это сделать?

EDIT: У Джонатана Аллена ниже есть более простой ответ, используя CObj () или CTypeDynamic (). Но приведенное ниже также работает с Преобразование строки в тип, допускающий значение NULL (int, double и т. Д.)

Dim conv As TypeConverter = TypeDescriptor.GetConverter(GetType(T))
queryStringObject = DirectCast(conv.ConvertFrom(queryStringVariable), T)

11
задан Community 23 May 2017 в 12:22
поделиться