CSVHelper 在哪里确定要用于 属性 的类型转换器?
Where does CSVHelper determine the Type Converter to use for a property?
我正在尝试了解 CsvHelper
如何在给定的 MemberMap
中为 属性 设置 TypeConverter。
鉴于此代码:
public MyMapper : ClassMap<Client>
{
public MyMapper()
{
Map(c => c.Age).Name("C_AGE");
...
}
}
我没有指定要在某处使用的 Type Converter
,CsvHelper 必须查看 Client
的 Age
属性 并确定它是一个 int
,它应该使用 Int32Converter
将 CSV 值转换为一个 int。 它在哪里做出这个决定?
我浏览了一些 GitHub 上的代码,但没能找到它发生的位置。
对您的问题的简短回答是,每种类型的默认值都是在 TypeConverterCache
中创建的。
private void CreateDefaultConverters()
{
AddConverter(typeof(bool), new BooleanConverter());
AddConverter(typeof(byte), new ByteConverter());
AddConverter(typeof(byte[]), new ByteArrayConverter());
AddConverter(typeof(char), new CharConverter());
AddConverter(typeof(DateTime), new DateTimeConverter());
AddConverter(typeof(DateTimeOffset), new DateTimeOffsetConverter());
AddConverter(typeof(decimal), new DecimalConverter());
AddConverter(typeof(double), new DoubleConverter());
AddConverter(typeof(float), new SingleConverter());
AddConverter(typeof(Guid), new GuidConverter());
AddConverter(typeof(short), new Int16Converter());
AddConverter(typeof(int), new Int32Converter());
AddConverter(typeof(long), new Int64Converter());
AddConverter(typeof(sbyte), new SByteConverter());
AddConverter(typeof(string), new StringConverter());
AddConverter(typeof(TimeSpan), new TimeSpanConverter());
AddConverter(typeof(ushort), new UInt16Converter());
AddConverter(typeof(uint), new UInt32Converter());
AddConverter(typeof(ulong), new UInt64Converter());
AddConverter(typeof(IList), new IEnumerableConverter());
AddConverter(typeof(ICollection), new IEnumerableConverter());
AddConverter(typeof(IEnumerable), new IEnumerableConverter());
AddConverter(typeof(IDictionary), new IDictionaryConverter());
}
我正在尝试了解 CsvHelper
如何在给定的 MemberMap
中为 属性 设置 TypeConverter。
鉴于此代码:
public MyMapper : ClassMap<Client>
{
public MyMapper()
{
Map(c => c.Age).Name("C_AGE");
...
}
}
我没有指定要在某处使用的 Type Converter
,CsvHelper 必须查看 Client
的 Age
属性 并确定它是一个 int
,它应该使用 Int32Converter
将 CSV 值转换为一个 int。 它在哪里做出这个决定?
我浏览了一些 GitHub 上的代码,但没能找到它发生的位置。
对您的问题的简短回答是,每种类型的默认值都是在 TypeConverterCache
中创建的。
private void CreateDefaultConverters()
{
AddConverter(typeof(bool), new BooleanConverter());
AddConverter(typeof(byte), new ByteConverter());
AddConverter(typeof(byte[]), new ByteArrayConverter());
AddConverter(typeof(char), new CharConverter());
AddConverter(typeof(DateTime), new DateTimeConverter());
AddConverter(typeof(DateTimeOffset), new DateTimeOffsetConverter());
AddConverter(typeof(decimal), new DecimalConverter());
AddConverter(typeof(double), new DoubleConverter());
AddConverter(typeof(float), new SingleConverter());
AddConverter(typeof(Guid), new GuidConverter());
AddConverter(typeof(short), new Int16Converter());
AddConverter(typeof(int), new Int32Converter());
AddConverter(typeof(long), new Int64Converter());
AddConverter(typeof(sbyte), new SByteConverter());
AddConverter(typeof(string), new StringConverter());
AddConverter(typeof(TimeSpan), new TimeSpanConverter());
AddConverter(typeof(ushort), new UInt16Converter());
AddConverter(typeof(uint), new UInt32Converter());
AddConverter(typeof(ulong), new UInt64Converter());
AddConverter(typeof(IList), new IEnumerableConverter());
AddConverter(typeof(ICollection), new IEnumerableConverter());
AddConverter(typeof(IEnumerable), new IEnumerableConverter());
AddConverter(typeof(IDictionary), new IDictionaryConverter());
}