我有一个包含一定数量的自定义 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 ) );
始终返回 TypeConverter,而不是预期的“TypeConverterMyType”。这让我认为“TypeConverterMyType”可能由于调用而无法访问。
[更新]
似乎 TypeDescriptor.GetConverter 适用于枚举类型,但不适用于基于类的类型。我想我正在通过拼图的一个重要部分......:?
所以问题
是:1-实际上是否可以从调用的方法访问自定义类型转换器?
2-有没有更好/更智能的方法来处理这个问题?
3- 我正在使用 .Net 3.5,如果我升级到 4.0 或 4.5,我应该期待同样的行为吗?