属性字段中的会话

时间:2012-05-08 03:20:10

标签: asp.net

在私有/公共属性中获取/设置会话变量是否可以?

private List<FileAttachment> fileAttachments;
public List<FileAttachment> FileAttachments
{
    get
    {
        if (Session["key"] != null)
        {
            fileAttachments = (List<FileAttachment>)Session["key"];
        }
        return fileAttachments;
    }
    set
    {
        fileAttachments = value;
        Session["key"] = fileAttachments;
    }
}

这里的目标是我希望容器类(该属性所在的用户控件)能够根据实体设置List<T>并显示存储在数据库中的现有附件。

1 个答案:

答案 0 :(得分:1)

这不是很安全; List<T>不是线程安全的。

在将列表分配给属性后,您永远不能修改列表,因为其他一些请求线程可能正在读取它。

因此,您应该将其设为ReadOnlyCollection<T>而不是List<T> (并确保您的FileAttachment类是不可变的或线程安全的)


除此之外,它取决于财产的位置 如果它在控件或页面上,那很好。