隐式转换问题(题目这样起可能不合适)

背景:asp.net mvc登录自写代码

 

代码1:判断登录用户的角色

1 /// <summary>
2 /// 角色是否为管理员
3 /// </summary>
4   public static bool IsRole()
5 {
6 return SessionAccessor<int>.GetSession("Role") == 1;
7 /*
8 *当HttpContext.Current.Session["Role"]为null时,
9 * Convert.ToInt32(HttpContext.Current.Session["Role"])
10 * 返回0而不会引发异常int.Parse会引发异常
11 */
12 //return Convert.ToInt32(HttpContext.Current.Session["Role"]) == 1;
13   }

代码二:一个泛型类SessionAccessor<T>



1 /// <summary>
2 /// Session存取工具类
3 /// </summary>
4 /// <typeparam name="T">存取对象的类型</typeparam>
5   public class SessionAccessor<T>
6 {
7 public static T GetSession(string key)
8 {
9 try
10 {
11 return (T)HttpContext.Current.Session[key];
12 }
13 catch
14 {
15 return default(T);
16 }
17 }
18
19 public static void SaveSession(string key, T value)
20 {
21 HttpContext.Current.Session[key] = value;
22 }
23
24 /// <summary>
25 /// 是否存在键为key的Session
26 /// </summary>
27 /// <param name="key"></param>
28 /// <returns>如果不存在,返回false</returns>
29   public static bool TestSession(string key)
30 {
31 return HttpContext.Current.Session[key] != null;
32 }
33 }

看到在GetSession()方法里有一个异常处理代码段,这是因为当在视图里写一个判断代码时如:



1 <% if(RoleOne.Helpers.UserStatus.IsRole()) { Response.Write("管理员");} %>

不会因为Session为空值而报错。

这引出了一个问题:Convert.ToInt32(xxx) 和 (int)xxx 的区别:当xxx为空时,前者返回0而后者引发一个异常。



注意文章开头的代码段:return Convert.ToInt32(HttpContext.Current.Session["Role"]) == 1;  要是这样写的话,就用不到在GetSession()方法加入异常处理代码,可是为了程序的一致性和整洁性,还是要采用现行的方法。

posted on 2011-02-23 17:49  Allan GC  阅读(183)  评论(0编辑  收藏  举报

导航