Sve*_*ang 11 .net vb.net generics type-conversion query-string
我有这个功能:
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
Run Code Online (Sandbox Code Playgroud)
我希望这样称呼:
Dim userId As Integer = SessionUtil.GetSessionValue(Of Integer)("uid")
Run Code Online (Sandbox Code Playgroud)
我试图使它成为通用的,因为最后查询字符串值可能至少是一个整数或一个字符串,但也可能是一个double和其他.但我得到错误:
Value of 'String' cannot be converted to Type 'T'
我用Session变量完成了同样的事情并且它有效.有人知道如何使这项工作?
编辑:下面的乔纳森艾伦有一个更简单的答案使用CObj()或CTypeDynamic().但是下面也可以从Convert string到nullable类型(int,double等等)
Dim conv As TypeConverter = TypeDescriptor.GetConverter(GetType(T))
queryStringObject = DirectCast(conv.ConvertFrom(queryStringVariable), T)
Run Code Online (Sandbox Code Playgroud)
Jon*_*len 16
最安全的方法是使用CTypeDynamic.这将确保使用隐式/显式运算符.
Function Convert(Of T)(s As String) As T
Return Microsoft.VisualBasic.CTypeDynamic(Of T)(s)
End Function
Run Code Online (Sandbox Code Playgroud)
这适用于简单类型,但对于复杂类型则无效.
Function Convert(Of T)(s As String) As T
Return CType(CObj(s), T)
End Function
Run Code Online (Sandbox Code Playgroud)
我认为问题在于你不能将字符串强制转换为整数(或者实际上是多种类型).它需要被解析.
我不确定,但是CType()可能会做而不是DirectCast().
| 归档时间: |
|
| 查看次数: |
4560 次 |
| 最近记录: |