3

下面是我的代码

private List<string> _myList
public List<string> myList
{
     get
     {
         if (Session["MyData"] != null)
            _myList = Session["MyData"] as List<string>;
         if(_myList==null)
            _myList = new List<string>();
         return _myList; 
      }

     set 
     { 
         Session["MyData"] = value; 
     }
  }

现在当我打电话

 myList.add(new string("string1"));

并使用

 myList.Count 

我越来越myList.Count equals 0不知道我的代码有什么问题。

4

4 回答 4

2

这会覆盖列表:

 get
 {
     if (Session["MyData"] != null)
        _myList = Session["MyData"] as List<string>; //<-- here
     if(_myList==null)
        _myList = new List<string>();
     return _myList; 
 }

尝试将其更改为:

 get
 {
     if(_myList != null)
       return _mylist;

     if (Session["MyData"] != null)
        _myList = Session["MyData"] as List<string>;
     else
        _myList = new List<string>();

     return _myList; 
 }
于 2013-04-22T06:12:59.233 回答
1
get
{
   if(_myList != null)
   { 
      Session["MyData"] = _myList;   // change
      return _myList;
   }

   if (Session["MyData"] != null)
      _myList = Session["MyData"] as List<string>;
   else
      _myList = new List<string>();

   return _myList; 
}
set
{
    _myList = value;         //change
    Session["MyData"] = value;
}
于 2013-04-22T06:34:42.570 回答
1

您没有修改_myList. 在您的get中,有时您会返回一个新List<string>项目,因此您将新项目添加到该新项目中,List并在再次调用它时将成员计数为另一个新项目List<string>

于 2013-04-22T06:13:07.177 回答
0

属性 getter 设置不Session["MyData"] = new List<string>();正确。

将您的代码更改为:

public List<string> myList
{
     get
     {
         return Session["MyData"] ?? (Session["MyData"] == new List<string>());
     }

     set 
     { 
         Session["MyData"] = value; 
     }
}
于 2013-04-22T06:13:47.743 回答