Me gustaría implementar la conversión entre dos clases de biblioteca mediante Convert.ChangeType en C#. No puedo cambiar ninguno de los dos tipos. Por ejemplo, convirtiendo entre Guid y byte [].Inyectar conversión de tipo personalizado a clases de biblioteca .NET
Guid g = new Guid();
object o1 = g;
byte[] b = (byte[]) Convert.ChangeType(o1, typeof(byte[])); // throws exception
Soy consciente de que Guid proporciona un método ToByteArray(), pero me gustaría tener que llama cuando se convierte en Guid byte []. La razón detrás de esto es que la conversión también tiene lugar en el código de la biblioteca (AseDataAdapter) que no puedo modificar. Entonces, ¿es posible definir una regla de conversión entre dos tipos sin modificar el código fuente de ninguna de las dos clases?
Estaba experimentando con TypeConverter, pero no parece funcionar bien:
Guid g = new Guid();
TypeConverter tc = TypeDescriptor.GetConverter(typeof(Guid));
byte[] b2 = (byte[])tc.ConvertTo(g, typeof(byte[])); // throws exception
El TC variables se establece en System.ComponentModel.GuidConverter que no soporta conversiones a byte []. ¿Puedo tener dos TypeConverters para la misma clase? Incluso si pudiera, ¿no tendría que anteponer un atributo al código fuente de la clase para asignar un TypeConverter?
Gracias
Gracias por un buen ejemplo :) – leppie
+1 Ni siquiera se dio cuenta de que podría agregar atributos a través de TypeDescriptor.AddAttributes, que podría ser extremadamente útil. –
Tenga en cuenta que no son atributos * reales *; la reflexión no los verá; solo System.ComponentModel –