3ENGINE

Programación y otros cachivaches

Archivo

Página 47/104

Tecnologia

Clonar or not clonar: that is the question


Programando yo el otro día en c#… necesitaba realizar un copia integra de un objeto, pero duplicando direcciones de memoria, es decir un objeto completamente nuevo pero que contenga los mismos datos… me interesaba que fuera una rutina universal que me sirviera para copiar cualquier objeto independientemente de su tipo.

A partir del artículo de Christian Bigentini descubrí que utilizando técnica de serialización y deserialización podia hacer lo que me proponia.

Pero por otro lado, me interesaba que el método que realiza una copia de mi objeto estuviera de algun modo asociado al tipo… para esto, lo mejor es utilizar las extensiones, una técnica que c# ha incluido a partir de la versión 3.0.

El código resultante es éste:

public static class MyExtensions{
  public static MiTipo Copia(this MiTipo plugin) {
    MemoryStream ms = new System.IO.MemoryStream();
    BinaryFormatter bf = new BinaryFormatter(null,
      new StreamingContext(StreamingContextStates.Clone));
    bf.Serialize(ms, plugin);
    ms.Seek(0, SeekOrigin.Begin);
    MiTipo copia = (MiTipo)bf.Deserialize(ms);
    ms.Close();
    return copia;
  }
}

Un ejemplo de su uso:

using espacio.nombres.declaracion.extensiones...
MiTipo objeto1 = new MiTipo();
objeto1.propiedad = "hola";
MiTipo objeto2 = objeto1.Copia();
...



Sin categoría

Canciones ‘cachondas’ de Alejandro Sanz


Por youtube hay muchas… pero estas dos me han hecho mucha gracia.

Alejandro Sanz a veces me peo

El Condon Partio




Sin categoría

Datasets: La propiedad NullValue y DefaultValue


Un truco para ahorrar código y quebraderos de cabeza cuando trabajamos con datasets de .NET es la propiedad NullValue que se encuentra en de la definición de las columnas de un DataTable. Si quieres mas detalles sobre DefaultValue y NullValue, lee éste artículo .

Pero en resumen, para ‘NullValue’ se trata de ahorrar la comprobación si el valor de la columna es nulo o no de modo que si la propiedad ‘NullValue’ la dejamos en blanco, de esto:

if (!row.IsObservacionesNull())
  obs = row.Observaciones;
else  
  obs = “”;

sólo necesitaremos hacer esto:

obs = row.Observaciones;

Con DefaultValue, la idea es que al dar a ciertas columnas valores por defecto, al insertar una nueva fila al Dataset sólo nos tendremos que preocupar por dar un valor a los campos que nos interese.




Tecnologia

MSLinqToSQLGenerator: Unspecified error


Cuando añades una partial class a una clase «Linq to SQL» de LINQ tienes todos los números que en un momento u otro acabe saliendo un error «‘MSLinqToSQLGenerator’ failed. Unspecified error» ¡incluso aunque tengas instalado el SP1 de Visual Studio 2008!. Gracias a éste enlace pude solucionar el problema.

1º paso: los using debe estar dentro del «namespace». Es decir de esto:

using System.Linq;
using System.Collections.Generic;
using System.Data;

namespace SIRAMcenter.Datos.Plugins
{
 partial class PluginInstanceDataContext
 {
   public IEnumerable GetNombreClasePluginsNoIControl(int idCentro)
   {

debes pasar a esto:

namespace SIRAMcenter.Datos.Plugins
{
 using System.Linq;
 using System.Collections.Generic;
 using System.Data;

 partial class PluginInstanceDataContext
 {
   public IEnumerable GetNombreClasePluginsNoIControl(int idCentro)
   {

2º paso: Ejecutar explicitamente la herramienta personalizada(MSLinqToSQLGenerator) de nuevo:

3ºpaso: limpia el proyecto y vuelve a compilar.