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 必须查看 ClientAge 属性 并确定它是一个 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());
}