【问题标题】:How to handle ((List<string>)Session.Add("")如何处理 ((List<string>)Session.Add("")
【发布时间】:2011-03-29 20:26:05
【问题描述】:
((List<string>)Session["answera"]).Add(xle.InnerText); 

我需要执行此操作,但我得到“对象引用未设置为...的实例” 我不想使用

 List<string> ast = new List<string>();
    ast.Add("asdas!");
    Session["stringList"] = ast;
    List<string> bst = (List<string>)Session["stringList"];

因为我只想向 Session-String-Array 添加一个字符串。

【问题讨论】:

    标签: c# asp.net arrays string session


    【解决方案1】:

    如果您收到空引用异常,那是因为会话没有像您认为的那样包含列表,或者“xle”为空。您认为会话已经包含您的列表有什么原因吗?

    【讨论】:

    • 当然,我的错。 :-/ 我忘记了我重写了我的 PageLoad 并忘记检查它,因为我确信它一定是别的东西。谢谢
    【解决方案2】:

    你可以使用

    ((List&lt;string&gt;)Session["answera"]).Add(xle.InnerText);

    但您必须确保 Session["answera"] 不是 null

    或者试试这个方法:

    string[] stringArray = {"asdas"};
    List<string> stringList = new List<string>(stringArray);
    

    【讨论】:

      【解决方案3】:

      您是否考虑过将您的 List&lt;string&gt; 包装在自定义上下文对象的属性中?我必须在应用程序上做类似的事情,所以我最终创建了一个 UserContext 对象,它有一个 Current 属性,负责创建新对象并将它们存储在会话中。这是基本代码,已调整为您的列表:

      public class UserContext
      {
          private UserContext()
          {
          }
      
          public static UserContext Current
          {
              get
              {
                  if (HttpContext.Current.Session["UserContext"] == null)
                  {
                      var uc = new UserContext
                                   {
                                       StringList = new List<string>()
                                   };
      
                      HttpContext.Current.Session["UserContext"] = uc;
                  }
      
                  return (UserContext) HttpContext.Current.Session["UserContext"];
              }
          }
      
          public List<string> StringList { get; set; }
      
      }
      

      我实际上从this SO question 获得了大部分代码和结构。

      因为这个类是我的Web 命名空间的一部分,所以我访问它就像访问HttpContext.Current 对象一样,所以我不必显式地转换任何东西。

      【讨论】:

      • +1 我总是将我的 Session 对象包装在一个暴露类型对象的静态类中
      【解决方案4】:

      像这样定义一个属性,并使用该属性而不是访问Session 对象

      public List<string> StringList
      {
           get
              {
                 if (Session["StringList"] == null)
                         Session["StringList"] = new List<string>();
      
                  return Session["StringList"] as List<string>;
               }
      }
      

      您只需在应用中的任何位置执行操作:

      StringList.Add("test");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 2020-01-11
        • 2020-02-26
        相关资源
        最近更新 更多