首页 > 解决方案 > CsvHelper 版本 22.1.2 默认 TypeConverter 用于特定类型的属性

问题描述

在 CsvHelper 的早期版本中,可以以简单的方式将自定义 TypeConverters 分配给 CsvConfiguration 对象,如此处的 Stackoverflow 答案中所述。在版本 22.1.2 中,TypeConverterCache 似乎已移至 CsvContext 类,但我无法访问它。

            using (var reader = new StreamReader(path))
            using (var csv = new CsvReader(reader, csvConfig))
            {
                // this works to access the existing TypeConverterCache objects
                csv.Context.get_TypeConverterCache();

                // error: Property, indexer, or event 'CsvContext.TypeConverterCache' is not supported by the language; try directly calling accessor methods 'CsvContext.get_TypeConverterCache()' or 'CsvContext.set_TypeConverterCache(?)
                csv.Context.TypeConverterCache.AddConverter<bool>(new MyCustomBooleanConverter());

                // error: CsvContext.set_TypeConverterCache(?)' is not supported by the language
                csv.Context.set_TypeConverterCache(xyz);
            }

我正在尝试为所有布尔字段设置默认转换器。我可以看到 TypeConverterCache 属性是源代码中 CsvContext 上的公共字段,所以我不确定我做错了什么。

public virtual TypeConverterCache TypeConverterCache { get; set; }

是否有人对在 CsvHelper 22.1.2 中为特定数据类型设置默认 TyperConverter 的最佳方法有任何见解?

标签: c#csvhelper

解决方案


按照这个 fiddle使用 .NET 5 似乎工作得很好。我不太确定 dotnetfiddle 使用哪个 C# 版本,但我希望在使用 .NET 5 时使用最新的 (9.0)。

但是,在这个使用 .NET Framework 4.7.2的小提琴中,我可以重现您的错误。我的猜测是使用了 C# v7.3,但这只是猜测。

因此,您的一个解决方案可能是升级到较新版本的 C#。或者,我建议您在项目的 GitHub 页面上创建一个问题,以查看它是否是有意的,以防作者未在此处遵循 SO 标记。


推荐阅读