C# で Convert.ChangeType による 2 つのライブラリ クラス間の変換を実装したいと考えています。どちらのタイプも変更できません。たとえば、Guid と byte[] の間の変換。
Guid g = new Guid();
object o1 = g;
byte[] b = (byte[]) Convert.ChangeType(o1, typeof(byte[])); // throws exception
Guid が ToByteArray() メソッドを提供していることは承知していますが、Guid が byte[] に変換されたときに呼び出されるようにしたいと考えています。これの背後にある理由は、変更できないライブラリ コード (AseDataAdapter) でも変換が行われるためです。では、2 つのクラスのどちらのソースコードも変更せずに、2 つの型の間の変換規則を定義することは可能でしょうか?
私は TypeConverter を試していましたが、どちらもうまくいかないようです:
Guid g = new Guid();
TypeConverter tc = TypeDescriptor.GetConverter(typeof(Guid));
byte[] b2 = (byte[])tc.ConvertTo(g, typeof(byte[])); // throws exception
変数 tc は、byte[] への変換をサポートしない System.ComponentModel.GuidConverter に設定されます。同じクラスに 2 つの TypeConverters を使用できますか? できたとしても、TypeConverter を割り当てるために、クラスのソース コードの先頭に属性を追加する必要はありませんか?
ありがとう