我有一个包含一定数量的自定义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,我应该期待相同的行为吗?