【问题标题】:list<int> showing null列表<int> 显示为空
【发布时间】:2012-03-24 04:07:38
【问题描述】:
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 添加三个整数值。

当我访问像这样的会话时,我总是得到空值。

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

任何人都可以帮助我吗?如何获取所有会话值作为列表?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我还应该补充一点,您在这里并不需要两个列表。如果您在两个代码子句上交换位置,则只需一个列表即可。
    • 但我在这一行遇到了问题。var temp = Session["SelectedList"] as List;
    【解决方案2】:

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

    在您的情况下,Session["SelectedList"] 不是 List&lt;int&gt; 类型,因此将返回 null

    .Union 的调用不是返回List&lt;int&gt;,而是返回IEnumerable&lt;int&gt;。调用.ToList() 将其转换为List&lt;int&gt;

    【讨论】:

      【解决方案3】:
      Session["SelectedList"] = tempList.Union(intList).ToList();
      

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

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          当您分配会话时,您的会话变为 System.Linq.Enumerable.UnionIterator&lt;int&gt; 类型,当您访问会话时,您将其转换为不匹配的 List&lt;int&gt;,因此会出现错误。

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

          if (Session["SelectedList"] != null)
          
            {
          
            List<int> ls = (List<int>)Session["SelectedList"];           
            var temp = ls;
          
            tempList.AddRange(temp);
            }
          
          Session["SelectedList"] = tempList.Union(intList).ToList(); 
          

          【讨论】:

          • 回答问题时,可能会格式化文本(有一些格式化按钮,代码的一个是{},只需选择文本,然后点击{})
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多