C#のConvert.ChangeTypeによる2つのライブラリクラス間の変換を実装したいと思います。私はどちらのタイプも変更できません。たとえば、Guidとbyte []の間の変換です。.NETライブラリクラスへのカスタム型変換の挿入
Guid g = new Guid();
object o1 = g;
byte[] b = (byte[]) Convert.ChangeType(o1, typeof(byte[])); // throws exception
私は、GUIDがToByteArray()メソッドを提供することを承知していますが、私は、GUIDは、[]のバイトに変換されたときに呼び出されることがしたいです。これの背後にあるのは、私が変更できないライブラリコード(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は[]のバイトに変換をサポートしていないSystem.ComponentModel.GuidConverterに設定されます。同じクラスの2つのTypeConverterを持つことはできますか?たとえできても、TypeConverterを割り当てるためにクラスのソースコードに属性を付加する必要はありませんか?
おかげ
素敵な例をありがとう:) – leppie
+1 TypeDescriptor.AddAttributes経由で属性を追加することもできませんでした。これは非常に便利です。 –
これらは実際の属性ではないことに注意してください。反射はそれらを見ません。 System.ComponentModelのみ –