2008-10-14 16 views

Respuesta

9

Este es el código que ideamos para la clonación. Esto funciona en 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

Creo que la funcionalidad de clonación estándar se dejó de lado para mantenerla simple y ligera. Sin embargo, creo que podría usar la serialización JSON o XML para lograr lo mismo. Sin embargo, no estoy seguro acerca de los costos de rendimiento.

1

Cómo crear el clon si mi fuente es IEnumerable. Este LayerDto también tiene algún tipo de objeto (por ejemplo, MetaItemDto).

Código:

LayerDto clase pública {}
MetaItemDtoList clase pública: System.Collections.ObjectModel.ObservableCollection {}

público Clone IEnumerable estática (fuente IEnumerable)

{

 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; 
     } 

}

pero el problema al que me enfrento es que esa capa no muestra sus metaItems (para cada capa).

3

ICloneable no está disponible en Silverlight 4 (no sé acerca de 1/2/3 o la próxima versión). Se elimina de las API públicas de Silverlight 4. Ayuda del código de Mike Schall; está trabajando para mí.

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); 
     } 
    } 
Cuestiones relacionadas