[英]Assign one session to another session for same Class in C#
我為同一個班級創建了2個會話。
public static Breadcrumb Breadcrumb
{
get { return HttpContext.Current.Session["Breadcrumb"] != null ? (Breadcrumb)HttpContext.Current.Session["Breadcrumb"] : null; }
set { HttpContext.Current.Session["Breadcrumb"] = value; }
}
public static Breadcrumb ChildBreadcrumb
{
get { return HttpContext.Current.Session["ChildBreadcrumb"] != null ? (Breadcrumb)HttpContext.Current.Session["ChildBreadcrumb"] : null; }
set { HttpContext.Current.Session["ChildBreadcrumb"] = value; }
}
和用於會話的類如下
[Serializable]
public class Breadcrumb
{
public string project { get; set; }
public int projectId { get; set; }
}
在一個事件中,我僅將一次面包屑分配給ChildBreadcrumb。
但是,在分配后更改面包屑時,ChildBreadcrumb始終更新。
如何防止此自動更新?
在頁面生命周期結束之前,會話不會進行序列化,並保存在那里。 這意味着直到那時這兩個引用都指向同一對象。
本質上,您正在執行此操作:
var A = new Breadcrumb { project = "original" };
var B = A;
B.project = "change";
由於面包屑是一class
它們是引用類型A
和B
都是對同一Breadcrumb
引用
為了避免這種情況,在將Breadcrumb
分配給ChildBreadcrumb
時,請復制它,例如:
var A = new Breadcrumb { project = "original" };
var B = new Breadcrumb { project = A.project, projectId = A.projectId };
B.project = "change";
現在, B
是一個獨立副本。
注意project
是一個不可變的string
, projectId
是一個int
值類型,因此它們的行為與Breadcrumb
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.