如果我创建一个用于自定义显示枚举的类,如下所示:
public class MyEnumConverter : EnumConverter
{
public MyEnumConverter(Type type) : base(type)
{
}
public override object ConvertTo(...)
public override object ConvertFrom(...)
}
当我使用MyEnumConverter
TypeConverter
标记枚举作为[TypeConverter(typeof(MyEnumConverter))]
public enum MyEnum
{
SomeValue,
OtherValue
}
:
EnumConverter
它按预期工作。 TypeConverter
构造函数如何接收表示枚举类型的the required type parameter? EnumConverter
知道如何专门处理TypeConverter
并为我填写此内容吗?这种语法糖是否会在背景中发生?这种行为是否可以自定义,如果我想为自定义TypeConverter
实现参数化构造函数,我可以通知{{1}}如何处理我的自定义构造函数?
答案 0 :(得分:1)
看起来,在内部,TypeConverter
使用复杂的嵌套if
语句处理所需转换器的采购。类似于(source):
internal static TypeConverter GetCoreConverterFromCustomType(Type type)
{
TypeConverter typeConverter = null;
if (type.IsEnum)
{
// Need to handle Enums types specially as they require a ctor that
// takes the underlying type.
typeConverter = new System.ComponentModel.EnumConverter(type);
}
else if (typeof(Int32).IsAssignableFrom(type))
{
typeConverter = new System.ComponentModel.Int32Converter();
}
else if (typeof(Int16).IsAssignableFrom(type))
{
typeConverter = new System.ComponentModel.Int16Converter();
}
//...
从第一个if
语句中,您可以看到它知道将特殊的Type
参数传递给构造函数。
作为对第二个问题的回答,我是否可以使用自定义参数化构造函数创建自定义TypeConverter
,该构造函数可以与TypeConverter
很好地配合使用,但这看起来很可疑。