各位,今天发现个代码中的下述Bug,以aspx程序为例,场景如下:
在A.aspx的后台代码A.aspx.cs中定义下述属性:
public IList<User> UserList
{
get;
set;
}
然后有个方法:
private void BindUserList(int groupId)
{
... ...
}
在认为该初始化的地方调用此方法,如Page_Load或者某个Button的Click中;
这样有个问题就是:如果某个地方的逻辑考虑不周,没有调用BindUserList方法,则 UserList属性会是null, 在前台页面调用foreach输出的时候会抛空引用。
解决方案:
private IList<User> _UserList;
public IList<User> UserList
{
get
{
if(this._UserList==null)
{
this._UserList=this.GetUserList(this.ddlGroupId.Value.ToSimpleT<int>(0));
}
return this._UserList;
}
}
这样一来有两个好处:
(1)、如果某次请求过程中压根就没有用到UserList属性,则可以避免一次初始化UserList的查询;
(2)、一旦任何一个地方使用到了UserList,则肯定会去查找合适的UserList。
如此有效的减少我们在开发过程中的逻辑判断,并保证数据的正确性。
大家以后设计类的时候多做些参照吧。