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>;
任何身体可以帮助我吗?如何将所有会话值作为列表?
由于
答案 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)
答案 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();