У меня есть эта функция:
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")
Я пытался сделать его универсальным, поскольку в конце значение строки запроса может быть, по крайней мере, целым числом или строкой, но, возможно, также двойным и другими. Но я получаю ошибку:
Value of 'String' cannot be converted to Type 'T'
Я сделал то же самое с переменными Session, и это сработало. Кто-нибудь знает способ сделать эту работу?
РЕДАКТИРОВАТЬ: Джонатан Аллен ниже имеет более простой ответ, используя CObj () или CTypeDynamic (). Но ниже также работает от Преобразование строки в обнуляемый тип (int, double и т.д ...)
Dim conv As TypeConverter = TypeDescriptor.GetConverter(GetType(T))
queryStringObject = DirectCast(conv.ConvertFrom(queryStringVariable), T)