2012-08-14 137 views
1

我试图做到这一点:如何删除对象b,设置对象a后,但不删除对象a?

Data4JS D4JS = (Data4JS)GlobalHelper.GetCurrentSession()["Data4JS"]; 
    GlobalHelper.GetCurrentSession()["Data4JS"] = null; 
    return D4JS; 

问题是它设置D4JS为null,以及,我真的不希望到了分裂我的代码为几个方法调用,怎么回事我能达致这容易?

+0

您需要克隆对象。尝试搜索克隆/复制对象。 – Reniuz 2012-08-14 09:09:16

+1

如果'D4JS'在第一行之后不为空,那么没有理由在第二行之后它应该为空。去尝试任何关联集合(例如'Dictionary')。当时发生了其他事情,你的片段错过了这些重要的细节。我的建议是你调试两次,找出会发生什么并编辑你的问题。 – 2012-08-14 09:12:52

回答

2

只是使用新的关键字,所以你不会使用引用或克隆对象的方法。

Deep cloning objects

+0

我该如何做新的一点?这对我来说没什么用,Data4JS D4JS = new Data4JS(); D4JS =(Data4JS)GlobalHelper.GetCurrentSession()[“Data4JS”];(D4JS)GlobalHelper.GetCurrentSession()[“Data2JS”]; – 2012-08-14 09:53:02

+0

Monkieboy给出了一个很好的关于如何创建一个新对象的想法,但正如我所说的,你可以使用clone来获得更清晰的方法。 – Freeman 2012-08-14 10:08:39

0

在这种情况下使用序列做了深刻的副本。

0

假设你的目标是很简单的,具有公共属性和所有你需要的是在酒店,你可以做一些类似的值:

Data4JS D4JS = (Data4JS)GlobalHelper.GetCurrentSession()["Data4JS"]; 
Data4JS result = new Data4JS 
{ 
    //Set your result object to the one in 
    //session by manually copying over the property values 
    Property1 = D4JS.Property1; 
}; 

GlobalHelper.GetCurrentSession()["Data4JS"] = null; 

return result; 

否则用什么弗里曼曾建议作为一个更清洁的方式实现你所需要的。