【问题标题】:How to print values of C# session object如何打印 C# 会话对象的值
【发布时间】:2014-01-29 06:44:17
【问题描述】:

我在会话中保存了一些值,如下所示。

List<MyEntity> MyVariable = <some values here>;
System.Web.HttpContext.Current.Session["MySession"] = MyVariable;

当我尝试在即时窗口中打印 MySession 变量时,它会显示以下内容:

Count = 2
    [0]: {MyProject.Model.MyEntity}
    [1]: {MyProject.Model.MyEntity}

如何打印这些索引 0 和 1 内的值?我尝试了以下方法,但没有成功,因为它显示错误“无法使用 [] 将索引应用于‘对象’类型的表达式”:

System.Web.HttpContext.Current.Session["MySession"][0];

【问题讨论】:

    标签: c# session object httpcontext


    【解决方案1】:

    您必须将您的值转换为您分配的类型,并在其上应用索引:

    ((List<MyEntity>)System.Web.HttpContext.Current.Session["MySession"])[0];
    

    Session 只为所有值保存泛型类型Object,每次访问它时都必须将它们转换为正确的类型。为避免在多个位置进行强制转换,您可以围绕 Session 创建一个包装类,如 this answer 所示。

    【讨论】:

    • 我们同时发布了相同的答案! :)
    • 哈哈是的。你们俩都是绝对正确的,但 Pierre-Luc Pineault 比你们早 9 秒发布了它,所以我不得不接受他的回答。
    【解决方案2】:

    您必须将会话对象转换为列表,这是一个示例:

    ((List<MyEntity>)System.Web.HttpContext.Current.Session["MySession"])[0]
    

    【讨论】:

      【解决方案3】:

      你可以试试这个代码:

      using System.Web;
      
      List<MyEntity> list = (List<MyEntity>)HttpContext.Current.Session["MySession"];
      
      if (list != null)
      {
          foreach (MyEntity item in list)
          {
              Response.Write(item.ToString());  // <-- you may want to override ToString to display the content
          }
      }
      

      您需要cast您的会话对象,然后才能以列表的形式访问它,因为您可以在会话中存储所有类型的objects,默认情况下object 没有索引器。然后是错误消息。

      在那之后,您仍然需要以某种方式实现一种方法来显示项目的内容。您可以覆盖 MyEntity 类的 ToString 方法来执行此操作。

      【讨论】:

        猜你喜欢
        • 2019-11-15
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 2020-06-27
        • 2019-03-24
        • 1970-01-01
        • 2021-12-26
        • 1970-01-01
        相关资源
        最近更新 更多