list <int>显示null </int>

时间:2012-03-24 04:07:38

标签: asp.net asp.net-mvc asp.net-mvc-2

string[] baChildrenIds = ids.Split(',');
                    List<int> intList = new List<int>();
                    foreach (var id in baChildrenIds)
                    {
                        intList.Add(Convert.ToInt32(id));
                    }
                    List<int> tempList = new List<int>();
                    if (Session["SelectedList"] != null)
                    {
                        var temp = Session["SelectedList"] as List<int>;
                        tempList.AddRange(temp);
                    }
                    Session["SelectedList"] = tempList.Union(intList);

初始添加我向Session添加两个Integer值。第二次我向Session添加三个整数值。

当我访问会话时,我总是得到null。

 var temp = Session["SelectedList"] as List<int>;

任何身体可以帮助我吗?如何将所有会话值作为列表?

由于

5 个答案:

答案 0 :(得分:3)

List类没有Union方法。该方法来自LINQ扩展,它在您的情况下返回IEnumerable。 IEnumerable不是列表。如果您使用的是强制转换而不是“as”,那么您会看到运行时错误。您需要做的就是将.ToList()添加到最后一行的末尾。

答案 1 :(得分:2)

如果转换失败,as运算符将返回null。

在您的情况下,Session["SelectedList"]不属于List<int>类型,因此正在返回null

.Union的调用并未返回List<int>,而是返回IEnumerable<int>。致电.ToList()将其转换为List<int>

答案 2 :(得分:2)

Session["SelectedList"] = tempList.Union(intList).ToList();

Union方法返回IEnumerable,而不是List。

希望它有所帮助。

答案 3 :(得分:2)

Union Linq操作返回IEnumerable。在分配会话变量时,请尝试以下方法:

Session["SelectedList"] = tempList.Union(intList).ToList();

答案 4 :(得分:1)

当您分配会话时,您的会话将成为 System.Linq.Enumerable.UnionIterator<int>类型,当您访问会话时,您在List<int>中将其转换为不匹配,因此会出错。

你必须像下面那样写,这样你才能得到价值

if (Session["SelectedList"] != null)

  {

  List<int> ls = (List<int>)Session["SelectedList"];           
  var temp = ls;

  tempList.AddRange(temp);
  }

Session["SelectedList"] = tempList.Union(intList).ToList();