|
Тема |
Re: DEEP COPY na ArrayList (! shallow clone) [re: Gogo] |
|
Автор |
шeф нa Coди Дeвня (full optional) |
|
Публикувано | 23.08.04 11:10 |
|
|
има един прост начин който аз използвам от известно време и в мойте случаи работи екстра ... идеята е сериализираш, десериализираш и си готов с нов референс ... в най-лошия случай просто ще ти се наложи да добавиш [Serializable] на няколко класа
Ето малко код:
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Collections;
/// <summary>
/// Creates a clone of an ArrayList object
/// </summary>
/// <param name="origList">
/// ArrayList to be deep cloned
/// </param>
/// <returns>
/// A completely new instance that what was passed in
/// </returns>
private ArrayList DeepClone(ArrayList origList)
{
. . . . MemoryStream mem = new MemoryStream();
. . . . try
. . . . {
. . . . . . . . BinaryFormatter bf = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
. . . . . . . . bf.Serialize(mem, origList);
. . . . . . . . mem.Seek(0, SeekOrigin.Begin);
. . . . . . . . return (ArrayList)bf.Deserialize(mem);
. . . . }
. . . . catch (Exception ex)
. . . . {
. . . . . . . . throw new ApplicationException("Deep copy operation failed", ex);
. . . . }
. . . . finally
. . . . {
. . . . . . . . mem.Close();
. . . . }
}
това е ...
XM TurboCT .. where comfort meets power
|
| |
|
|
|