如何打印C#会话对象的值

时间:2014-01-29 06:44:17

标签: c# session object httpcontext

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

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中的值?我尝试了以下但它没有工作,因为它显示错误“无法将带有[]的索引应用于'object'类型的表达式”:

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

3 个答案:

答案 0 :(得分:2)

您必须将值转换为您指定的类型,并对其应用索引:

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

会话仅为所有值保留泛型类型Object,每次访问时都必须将它们转换为正确的类型。为了避免在多个地方进行转换,您可以围绕Session创建一个包装类,如this answer中所示。

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

您可以尝试以下代码:

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
    }
}

您需要强制您的会话对象,然后才能以列表形式访问它,因为您可以在会话中存储所有类型的object,默认情况下为{{1没有索引器。从而出现错误信息。

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