【发布时间】:2011-10-10 14:45:58
【问题描述】:
我有这个功能:
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 变量做了同样的事情,它奏效了。任何人都知道如何使这项工作?
编辑: 下面的 Jonathan Allen 使用 CObj() 或 CTypeDynamic() 给出了更简单的答案。但以下也适用于Convert string to nullable type (int, double, etc...)
Dim conv As TypeConverter = TypeDescriptor.GetConverter(GetType(T))
queryStringObject = DirectCast(conv.ConvertFrom(queryStringVariable), T)
【问题讨论】:
-
我很好奇错误消息中对 Type 'T' 的引用。这是运行时错误还是编译时错误?请原谅缺乏明确的答案;自 VB6 以来,我一直避免使用 VB。
-
@Steve Morgan,这是一个编译时错误。
标签: .net vb.net generics query-string type-conversion