У меня есть эта функция:
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)