特定の数のカスタム TypeConverter を含むアプリケーションがあります。これらは、XML 解析のコンテキストで使用するとうまく機能します。
別の側では、次を使用してクラス コンストラクターを呼び出しています (以前に定義された XML タグに基づく) (これまでのところ動作しています)。
Type MyClass = TypeDelegator.GetType( FullClassName ); // Get the class type
if( MyClass != null ) { // If we find a matching type
ConstructorInfo[] CtorInfos = MyClass.GetConstructors(); // Get constructor infos
if( CtorInfos != null ) { // If we could find a ctor
if( CtorInfos.Length == 1 ) { // We expect 1 Ctor with args
CtorInfos[0].Invoke( new object[] { CtorArg1, CtorArg2 } );
}
}
}
今、呼び出されたコンストラクター内から TypeConverter を再利用しようとしています。しかし、うまくいかないようです。通常の GetConverter メソッドを使用しています。
MyType myVar = (MyType)TypeDescriptor.GetConverter( typeof( MyType ) ).ConvertFrom( "1;2;3;4" );
型クラスは次のようになります。
public class MyType {
private int PrivateField;
public MyType() { }
public MyType( String Arg1, Char Arg2 ) { }
public int Prop1 { get { return ( 4 ); } }
public int Prop2 {
get { return ( PrivateField ); }
set { PrivateField = value; }
}
}
問題を掘り下げると、TypeDescriptor.GetConverter が (同じアセンブリの一部である) カスタム型コンバーターを見つけられないようです。
var debugVar = TypeDescriptor.GetConverter( typeof( MyType ) );
期待される「TypeConverterMyType」ではなく、常に TypeConverter を返します。おそらく呼び出しのため、「TypeConverterMyType」にアクセスできないと思います。
[更新]
TypeDescriptor.GetConverter は列挙型では機能しますが、クラス ベースの型では機能しないようです。私はパズルの重要な部分の隣を通過していると思います... :?
質問:
1- 呼び出されたメソッドからカスタム型コンバーターにアクセスすることは実際に可能ですか?
2-これを処理するためのより良い/よりスマートな方法はありますか?
3- .Net 3.5 を使用しています。4.0 または 4.5 にアップグレードした場合、同じ動作を期待できますか?