在ASP.NET页面中可以使用Request对象获取指定参数的值,例如:
string value = Request["id"];
参数值都是string类型,但是进行处理的时候可能要转换成数字、日期等类型。
string value = Request["id"];
int id = Int32.Parse(value);
实际应用的时候还要考虑异常的情况。
string value = Request["id"];
int id;
Int32.TryParse(value, out id);
如果每个页面都这么写,显得非常麻烦,代码重复也很严重,还是封装成一个工具类吧。
public class ReqHelper
{
public static string GetString(string paramName) { ... }
public static int GetInt(string paramName) { ... }
public static bool GetBool(string paramName) { ... }
...
}
虽然原始类型是有限的,但是对每个类型写一个方法,还是显得臃肿了。其实这多个方法,区别只在于返回值类型。有没有办法把类型作为参数,让方法返回特定类型的值呢?答案是有的,那就是泛型。
public class ReqHelper
{
public static T Get<T>(string paramName) {
string value = HttpContext.Current.Request.Form[paramName];
Type type = typeof(T);
return (T)Convert.ChangeType(value, type);
}
}
T是在调用的时候才被指定,也就相当于类型参数。最后要考虑的还是异常处理,TryParse方法在转换出错的时候会输出该类型的默认值,这里也可以参考这种做法,但问题是如何获取未知类型T的默认值。其实在C#中已经提供这样一个关键字,那就是default。最终代码如下:
public class ReqHelper
{
public static T Get<T>(string paramName) {
string value = HttpContext.Current.Request.Form[paramName];
Type type = typeof(T);
object result;
try
{
result = Convert.ChangeType(value, type);
}
catch
{
result = default(T);
}
return (T)result;
}
}
调用方法:
int id = ReqHelper.Get<int>("id");
评论 (1条)