【发布时间】:2013-10-03 16:23:49
【问题描述】:
如果需要,使用以下内容从查询字符串中获取值并转换为特定类型。
public static T Convert<T>(NameValueCollection QueryString, string KeyName, T DefaultValue) where T : IConvertible
{
//Get the attribute
string KeyValue = QueryString[KeyName];
//Not exists?
if (KeyValue == null) return DefaultValue;
//Empty?
if (KeyValue == "") return DefaultValue;
//Convert
try
{
return (T)System.Convert.ChangeType(KeyValue, typeof(T));
}
catch
{
return DefaultValue;
}
}
会这样调用
int var1 = Convert<int>(HttpContext.Current.Request.QueryString,"ID", 0);
但是,当尝试执行以下操作时,它无法正常工作,所以我的问题是,如果从查询字符串变量中检索到的值是 1 或 0 而不是 true假的。
ie... instead of
http://localhost/default.aspx?IncludeSubs=true
the call is
http://localhost/default.aspx?IncludeSubs=1
bool var1 = Convert<bool>(HttpContext.Current.Request.QueryString,"IncludeSubs", false);
【问题讨论】:
-
“无法正常工作”是什么意思?明确指出哪里出了问题,我们无法猜测。
-
Convert.ChangeType("1", typeof(bool))(传递string)不起作用。Convert.ChangeType(1, typeof(bool))(传递int)可以。 -
我很抱歉没有说得太具体。 QueryString[KeyName] 行以字符串形式返回它检索到的任何内容的值......所以它基本上被传入,正如您在响应中的第一行中所看到的那样。我收到的异常是“字符串未被识别为有效的布尔值”
-
基本上我正在寻找像 Convert.ToBoolean(stringval) 这样的方法,但没有特定于布尔值...如果我键入方法 T,convert.changetype 会知道,如果我得到一个字符串并传入除 0 以外的数字,结果为 true