《程序员》杂志今年第8期76-90页, Juval Lowy 的文章: C#编码标准/指导和最佳实践,
这是篇好文章, 但是我们来看看技术专家的评析。82-83页: ASP.NET 和 Web Services (评析人: 金戈) 3. 在访问一个 Session 变量前, 总要检查它是否为 null。
11. 用一个局部属性一封装一个 Session 变量, 只有这个局部属性有权访问 Session,
其他的代码只能访问这个属性, 而不能直接访问 Session 变量。int Memory
{
get
{
int memory = 0;
object state = Session["Memory"];
if (state != null)
{
memory = (int)state;
}
return memory;
}
set
{
Session["Memory"] = value;
}
}82页 Juval Lowy 先生的上述代码段已经很清楚了。金戈先生的评析在83页又给出了一个几乎一样的代码段, 把局部属性改为 public 的, 我看
不出来复制这么一个如此相似的代码段有何意义。更为遗憾的是在 set 方法中居然出现了这
样一个表达式 value==null ? -1 : value, 这个判断纯属画蛇添足, 并且不可能通过编
译, 因为 LastItemID 是一个 int 属性, value 是 int 型的, 不是引用类型, 怎么能
与 null 进行比较呢?public int LastItemID
{
get
{
object sessionLastItemID = Session["LastItemID"];
int lastItemID = -1;
if (sessionLastItemID != null)
{
lastItemID = (int)sessionLastItemID;
}
return lastItemID;
}
set
{
Session["LastItemID"] = value==null ? -1 : value;
}
}
这是篇好文章, 但是我们来看看技术专家的评析。82-83页: ASP.NET 和 Web Services (评析人: 金戈) 3. 在访问一个 Session 变量前, 总要检查它是否为 null。
11. 用一个局部属性一封装一个 Session 变量, 只有这个局部属性有权访问 Session,
其他的代码只能访问这个属性, 而不能直接访问 Session 变量。int Memory
{
get
{
int memory = 0;
object state = Session["Memory"];
if (state != null)
{
memory = (int)state;
}
return memory;
}
set
{
Session["Memory"] = value;
}
}82页 Juval Lowy 先生的上述代码段已经很清楚了。金戈先生的评析在83页又给出了一个几乎一样的代码段, 把局部属性改为 public 的, 我看
不出来复制这么一个如此相似的代码段有何意义。更为遗憾的是在 set 方法中居然出现了这
样一个表达式 value==null ? -1 : value, 这个判断纯属画蛇添足, 并且不可能通过编
译, 因为 LastItemID 是一个 int 属性, value 是 int 型的, 不是引用类型, 怎么能
与 null 进行比较呢?public int LastItemID
{
get
{
object sessionLastItemID = Session["LastItemID"];
int lastItemID = -1;
if (sessionLastItemID != null)
{
lastItemID = (int)sessionLastItemID;
}
return lastItemID;
}
set
{
Session["LastItemID"] = value==null ? -1 : value;
}
}
解决方案 »
- 在调试的时候执行Properties.Settings.Default.Save();提示配置文件已被另一个程序更改 XXX.exe.config
- 关于 SQLITE 的一个问题
- 网站 被黑! 元旦要加班 郁闷 散分!
- C#中如何将Float类型转化为byte[]
- 求C# IO读写的问题!
- [注册表怪象]我明明操作的是HKEY_CURRENT_USER\Software\keyway
- vfp数据库(单表)绑定DATAGRID的问题!
- C#中在反射中获取新对象问题,急!!!!
- menuStrip既然是可见的,为什么它的分类属于Component而不是Control?
- WMI全揭秘
- 各位帮忙,着急!搞不定就会不了家了
- 高分请教 文件夹共享权限解决办法
value==null?-1:value
最好把null写前面,偶尔笔误容易找一点
error CS0019: Operator '==' cannot be applied to operands of type 'int' and '<null>'另, "最好把 null 写前面, 偶尔笔误容易找一点", 这句话也不成立, C# 的条件表达式要求
是 bool 型的, 象 (value = 0) ? -1 : value 之类少写一个 '=' 的错误将引发 CS0029 编
译器错误: 无法将类型隐式转换, 没有必要象 C 中那样把常量写在条件表达式左端预防笔误.当然, (IsPositive == true) ? 1 : -1 或 (IsPositive == false) ? -1 : 1 这种表达式
最好改写如下: IsPositive ? 1 : -1 或 !IsPositive ? -1 : 1, 不然的话, 少写一个 '='
可真不会引发编译器错误.
在页面基类中定义方法:
public void SetSessionVar(GlobalKeys key,object value)
public object GetSessionVar(GlobalKeys key)
其中,GlobalKeys是一个enum,所有需要使用Session的地方都应该先去该枚举添加一个枚举项,此项将作为Session中的Key,这样就防止了Session中的Key重复.
当然还可以判空和清空函数:
public void RemoveSessionVar(GlobalKeys key)
public bool IsSessionVarNull(GlobalKeys key)
{
private string _sessionid; public void WriteToSession( HttpSessionModule Session)
{
Session["com.xxxxxx.www.SafetyInfo"] = this;
_sessionid = Session.SessionID;
} public static SafetyInfo GetInstance( HttpSessionModule Session )
{
SafrtyInfo _instance = Session[["com.xxxxxx.www.SafetyInfo"];
if ( _instance == null || _instance._sessionid != Session.SessionID )
return null;
else
return _instance;
}
}