为了在程序中批量传参数,我将参数封装到一个类中,在程序中有如下代码:
var myPanel = new PanelClass() { dictPanel = panelB.dictPanel, dictFilePanel = panelB.dictFilePanel };
panelB.Clear();
当执panelB执行了Clear之后,发现myPanel的相关属性也被Clear了。
后来查阅资料,问题是引用类型同时指向同一个实体,要想属性不被 Clear掉,
要进行Deep Clone。
public PanelClass Clone()
{
if(!typeof(PanelClass).IsSerializable)
{
throw new ArgumentException("The type must be serializable.","PanelClass");
}
if(Object.ReferenceEquals(this,null))
{
return default(PanelClass);
}
IFormatter formatter = new BinaryFormatter();
Stream stream = new MemoryStream();
using(stream)
{
formatter.Serialize(stream, this);
stream.Seek(0, SeekOrigin.Begin);
return (PanelClass)formatter.Deserialize(stream);
}
}
其中相关类头上要增加可序列化标志[Serializable],这样问题可正常解决。