如何在没有参考的情况下从会话数据中复制?

时间:2017-02-22 11:04:00

标签: c# asp.net session clone

我有Session object,如何在没有参考的情况下复制此值。

var temp=new T(Session["Tdata"] as T);

temp.DataCount.RemoveAt(1);

我的T班是

public T()
{
 DataCount=new List<int>();
}

public T(T tempt)
{
    DataCount=tempt.DataCount;
}

public List<int> DataCount{get;set;}

当我从temp.Its中移除DataCount时,也会从Session["Tdata"]移除。我不想将其从Session.Google中删除,因为reference type会导致它。谢谢。

1 个答案:

答案 0 :(得分:2)

List<int>是一种引用类型,就像T一样。因此,当您的复制构造函数复制原始的DataCount属性时,它不会复制值序列,而是复制原始List<int>本身 - 所以很自然地,对一个的更改会反映在另一个中。

更改您的复制构造函数以创建列表,但具有相同的原始成员。幸运的是,List<int>的构造函数接受现有列表并接受其成员:

public T(T tempt)
{
    DataCount = new List<int>(tempt.DataCount);
}