Vorrei implementare la conversione tra due classi di libreria da Convert.ChangeType in C#. Non posso cambiare nessuno dei due tipi. Ad esempio la conversione tra Guid e byte [].Iniettare la conversione del tipo personalizzato in classi di librerie .NET
Guid g = new Guid();
object o1 = g;
byte[] b = (byte[]) Convert.ChangeType(o1, typeof(byte[])); // throws exception
Sono consapevole che Guid fornisce un metodo ToByteArray(), ma mi piacerebbe avere quel chiamato quando Guid viene convertito in byte []. La ragione di questo è che la conversione avviene anche nel codice della libreria (AseDataAdapter) che non posso modificare. Quindi è possibile definire una regola di conversione tra due tipi senza modificare il codice sorgente di una delle due classi?
stavo sperimentando con TypeConverter, ma non sembra funzionare sia:
Guid g = new Guid();
TypeConverter tc = TypeDescriptor.GetConverter(typeof(Guid));
byte[] b2 = (byte[])tc.ConvertTo(g, typeof(byte[])); // throws exception
TC variabile imposta System.ComponentModel.GuidConverter che non supporta le conversioni al byte []. Posso avere due TypeConverters per la stessa classe? Anche se potessi, non dovrei anteporre un attributo al codice sorgente della classe per assegnare un TypeConverter?
Grazie
Grazie per un buon esempio :) – leppie
+1 Non si è nemmeno reso conto che è possibile aggiungere attributi tramite TypeDescriptor.AddAttributes - che potrebbe essere estremamente utile. –
Si noti che non sono attributi * real * - il riflesso non li vedrà; solo System.ComponentModel –