我有一个像这样的通用对象:
public class FieldOfT<TType>
{
public TType Value { get; set; }
public bool Foo { get; set; }
public int Bar { get; set; }
}
我创建了一个自定义自动图类型转换器,如下所示:
public class FieldOfTTypeConverter<TType, TFieldOfTType> : ITypeConverter<TType, TFieldOfTType> where TFieldOfTType: FieldOfT<TType>, new()
{
public TFieldOfTType Convert(TType source, TFieldOfTType destination, ResolutionContext context)
{
if (destination == null)
{
destination = new TFieldOfTType();
}
destination.Value = source;
return destination;
}
}
此时我需要来自所有ValueTypes(bool,char,double等)的映射包含它们的可空类型(bool?,char?,double?等)。
以下代码可以正常使用:
this.CreateMap<bool, FieldOfT<bool>>().ConvertUsing<FieldOfTTypeConverter<bool, FieldOfT<bool>>>();
this.CreateMap<bool?, FieldOfT<bool?>>().ConvertUsing<FieldOfTTypeConverter<bool?, FieldOfT<bool?>>>();
this.CreateMap<double, FieldOfT<double>>().ConvertUsing<FieldOfTTypeConverter<double, FieldOfT<double>>>();
this.CreateMap<double?, FieldOfT<double?>>().ConvertUsing<FieldOfTTypeConverter<double?, FieldOfT<double?>>>();
有更优雅的解决方案吗?像类型列表和循环或通用实现一样?
这是一个粗略的想法:
this.CreateMap(typeof(ValueType),typeof(FieldOfT<>)).ConvertUsing(typeof(FieldOfTTypeConverter<,>));
是否可以使用typeof(?)
收集所有值类型?