1

特定の数のカスタム 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 にアップグレードした場合、同じ動作を期待できますか?

4

0 に答える 0