2008-10-14 6 views

Antwort

9

Hier ist der Code, den wir zum Klonen entwickelt haben. Dies funktioniert in Silverlight 2 & 3.

Public Shared Function Clone(Of T)(ByVal source As T) As T 
    Dim serializer As New DataContractSerializer(GetType(T)) 
    Using ms As New MemoryStream 
     serializer.WriteObject(ms, source) 
     ms.Seek(0, SeekOrigin.Begin) 
     Return DirectCast(serializer.ReadObject(ms), T) 
    End Using 
End Function 
0

Ich glaube, dass die Standard-Klonen-Funktion weggelassen wurde, um es einfach und leicht zu halten. Ich glaube, dass Sie entweder JSON oder XML-Serialisierung verwenden können, um dasselbe zu erreichen. Nicht sicher über die Leistungskosten.

1

Wie Klon zu erstellen, wenn meine Quelle IEnumerable ist. Dieser LayerDto hat auch einen Objekttyp (zB MetaItemDto).

Code:

public class LayerDto { }
public class MetaItemDtoList: System.Collections.ObjectModel.ObservableCollection { }

public static IEnumerable Clone (IEnumerable Quelle)

{

 IEnumerable<LayerDto> layers; 

     DataContractSerializer serializer = new DataContractSerializer(typeof(IEnumerable<LayerDto>)); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, source); 
      ms.Seek(0, SeekOrigin.Begin); 
      //return (IEnumerable<LayerDto>)serializer.ReadObject(ms); 
      layers = (IEnumerable<LayerDto>)serializer.ReadObject(ms); 
      return layers; 
     } 

}

Aber was ist das Problem, das ich gegenüberstelle, ist, dass Schicht nicht seine metaItems (für jede Schicht) zeigt.

3

ICloneable ist nicht verfügbar in Silverlight 4 (ich weiß nicht über 1/2/3 oder kommende Version). Es wird aus den öffentlichen APIs von Silverlight 4 entfernt. Hilfe von Mike Schall Code; es funktioniert für mich.

public LayerDto Clone(LayerDto source) 
    { 

     DataContractSerializer serializer = new DataContractSerializer(typeof(LayerDto)); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      serializer.WriteObject(ms, source); 
      ms.Seek(0, SeekOrigin.Begin); 
      return (LayerDto)serializer.ReadObject(ms); 
     } 
    } 
Verwandte Themen