从会话 [] 复制对象
本文关键字:复制 对象 会话 | 更新日期: 2023-09-27 18:34:03
我将数据存储在Session["miData"]
中,我想返回此对象,但删除对象内列表中的某些项目。
这是我的代码:
else
{
ListDevicesByLabelModel data = (ListDevicesByLabelModel)Session["miData"];
ListDevicesByLabelModel tempdata = data;
if (filterType == "model" && filterKey != null)
{
tempdata.devices.device = data.devices.device.Where(c => c.model == filterKey).ToList();
}
return Json(tempdata, JsonRequestBehavior.AllowGet);
}
但是,Session["miData"]
中的实际对象由此代码更改。
我做错了什么?
当您从Session
获取对象时,您无需担心对象被修改,因为当您从Session
获取对象时,已经为您创建了一个副本。所以你的代码实际上是多余的。
下面是有关如何复制通过引用传递的对象的一些常规信息。
对象通过引用分配,引用指向同一对象。因此,当您将一个变量分配给另一个变量时,它不会复制对象本身。
您需要通过在类中实现IClonable
接口或创建一个方法来Copy
对象,该方法将返回一个新对象,其中包含从现有对象复制的字段,如下所示(如果您有嵌套对象,这将不起作用,如果是这种情况,您需要执行深度复制: 如何在 .NET 中执行对象的深层复制(特别是 C#)?:
public class ListDevicesByLabelModel
{
public ListDevicesByLabelModel Clone()
{
var newObj = new ListDevicesByLabelModel();
newObj.SomeProperty = SomeProperty;
//assign other properites
return newObj;
}
}
并稍后使用它:
ListDevicesByLabelModel data = (ListDevicesByLabelModel)Session["miData"];
ListDevicesByLabelModel tempdata = data.Clone();
if (filterType == "model" && filterKey != null)
{
tempdata.devices.device = data.devices.device.Where(c => c.model == filterKey).ToList();
}
return Json(tempdata, JsonRequestBehavior.AllowGet);